【问题标题】:Python - Same xpath in selenium and lxml different resultsPython - selenium 和 lxml 中的相同 xpath 不同的结果
【发布时间】:2016-04-14 19:05:19
【问题描述】:

我有这个站点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()")

我得到空列表。这是为什么呢?

【问题讨论】:

    标签: python selenium lxml


    【解决方案1】:

    看起来“奇怪”类是由 Javascript 在此站点中添加的。

    Selenium 在运行浏览器时执行 Javascript,因此您拥有预期的类。

    requests 库不会执行 JS,所以没有 'odd' 类。

    【讨论】:

      【解决方案2】:

      当您使用Selenium 打开http://www.google-proxy.net 时,JavaScript 已启用。在这种情况下,JavaScript 将 oddeven 类添加到 tr 元素中。

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

      【讨论】:

        猜你喜欢
        • 2019-10-21
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 2019-05-22
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        相关资源
        最近更新 更多