开发者社区> 问答> 正文

网页的格式使选择文本与硒是不可能的

这个问题快把我逼疯了:我试图使用Selenium捕获Pandorabot的响应,但是尽管我可以输入文本并让机器人回复,但它的页面格式却让选择输出文本变成了一场噩梦。 这是我的Python代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep

driver = webdriver.Firefox()
driver.get("http://demo.vhost.pandorabots.com/pandora/talk?botid=b0dafd24ee35a477")
elem = driver.find_element_by_name("input")
elem.clear()
elem.send_keys("hello")
elem.send_keys(Keys.RETURN)

line = driver.find_element_by_xpath("(//input)[@name='botcust2']/preceding::font[1]/*")


print(line)
response = line.text
print(response)

driver.close()

它设法获得响应的第一部分(“Chomsky:”),但不能获得其余部分。 如何正确捕获响应文本(理想情况下不包括bot名称)? 有没有一种更优雅的方式(如jquery脚本),如果网页被重新格式化,不会那么容易崩溃? 很多谢谢! 编辑 所以,在试用了jQuery之后,我发现了一个解决方案,可以解决URL文本无法显示的问题。 我将整个文本字符串设置为一个变量,然后将名称的任何实例和空行替换为“。所以pguardiario指出的jQuery代码变成:

# get the last child text node
response = self.browser.execute_script("""
                  var main_str = $('font:has(b:contains("Chomsky:"))').contents().has( "br" ).last().text().trim();
                  main_str = main_str.replace(/Chomsky:/g,'').replace(/^\\s*[\\r\\n]/gm, '');
                  return main_str;
                """)

我相信可能有更好的/更优雅的方式来做整个事情,但现在它是有效的。 非常感谢pguardiario和其他人的建议! 问题来源StackOverflow 地址:/questions/59384143/webpage-formatted-in-a-way-that-makes-selecting-text-with-selenium-impossible

展开
收起
kun坤 2019-12-26 15:38:33 400 0
1 条回答
写回答
取消 提交回答
  • 既然你问的jQuery:

    from requests import get
    body = get("http://code.jquery.com/jquery-1.11.3.min.js").content.decode('utf8')
    driver.execute_script(body)
    
    # get the last child text node
    response = driver.execute_script("""
      return $('font:has(b:contains("Chomsky:"))').contents().last().text().trim()
    """)
    
    2019-12-26 15:38:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
营销设计场景下的图像和文字生成 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载