Python - 相同的xpath在硒和lxml中的不同结果
问题描述:
我有这个网站http://www.google-proxy.net/,我需要获得第一个代理的ip:port。Python - 相同的xpath在硒和lxml中的不同结果
br = webdriver.Firefox()
br.get("http://www.google-proxy.net/")
ip = br.find_element_by_xpath("//tr[@class='odd']/td[1]").text; time.sleep(random.uniform(1, 1))
port = br.find_element_by_xpath("//tr[@class='odd']/td[2]").text; time.sleep(random.uniform(1, 1))
它工作正常。但现在我想要做的lxml
page = requests.get(proxy_server)
root = lxml.html.fromstring(page.text)
ip = root.xpath("//tr[@class='odd']/td[1]/text()")
port = root.xpath("//tr[@class='odd']/td[1]/text()")
我得到空列表。这是为什么?
答
看起来'奇怪'类是由Javascript在本网站添加。
Selenium在运行浏览器时执行Javascript,所以您有预期的类。
请求库不会执行JS,所以没有'奇怪'类。
答
当您使用Selenium
打开http://www.google-proxy.net
,已启用JavaScript。在这种情况下,JavaScript将类odd
和even
添加到tr
元素。
该requests.get
方法加载HTML从http://www.google-proxy.net
未启用JavaScript。因此,类odd
和even
未添加到tr
元素,并且您的XPath/lxml
功能不会选择任何内容。要复制此行为,您可以使用JavaScript切换器插件,例如Chrome plugin。这使您可以在不启用JavaScript的情况下轻松加载网页。