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将类oddeven添加到tr元素。

requests.get方法加载HTML从http://www.google-proxy.net未启用JavaScript。因此,类oddeven未添加到tr元素,并且您的XPath/lxml功能不会选择任何内容。要复制此行为,您可以使用JavaScript切换器插件,例如Chrome plugin。这使您可以在不启用JavaScript的情况下轻松加载网页。