Python - 在 selenium 和 lxml 中相同的 xpath 不同的结果
Python - Same xpath in selenium and lxml different results
我有这个网站 http://www.google-proxy.net/,我需要获得第一个代理 ip:port。
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()")
我得到空列表。这是为什么?
看起来 'odd' class 是由 Javascript 添加到此站点的。
Selenium 在运行浏览器时会执行 Javascript,因此您得到了预期的 class。
requests库不会执行JS,所以没有'odd' class.
当您使用Selenium
打开http://www.google-proxy.net
时,JavaScript被启用。在这种情况下,JavaScript 将 类 odd
和 even
添加到 tr
元素。
requests.get
方法从 http://www.google-proxy.net
加载 HTML,但未启用 JavaScript。因此 类 odd
和 even
不会添加到 tr
元素中,并且您的 XPath/lxml
功能不会 select 任何东西。要复制此行为,您可以使用 JavaScript 切换器插件,例如 Chrome plugin。这使您可以在不启用 JavaScript 的情况下轻松加载网页。
我有这个网站 http://www.google-proxy.net/,我需要获得第一个代理 ip:port。
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()")
我得到空列表。这是为什么?
看起来 'odd' class 是由 Javascript 添加到此站点的。
Selenium 在运行浏览器时会执行 Javascript,因此您得到了预期的 class。
requests库不会执行JS,所以没有'odd' class.
当您使用Selenium
打开http://www.google-proxy.net
时,JavaScript被启用。在这种情况下,JavaScript 将 类 odd
和 even
添加到 tr
元素。
requests.get
方法从 http://www.google-proxy.net
加载 HTML,但未启用 JavaScript。因此 类 odd
和 even
不会添加到 tr
元素中,并且您的 XPath/lxml
功能不会 select 任何东西。要复制此行为,您可以使用 JavaScript 切换器插件,例如 Chrome plugin。这使您可以在不启用 JavaScript 的情况下轻松加载网页。