这个问题快把我逼疯了:我试图使用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
既然你问的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()
""")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。