【问题标题】:How to understand the webdriver and get() in Selenium?如何理解 Selenium 中的 webdriver 和 get()?
【发布时间】:2019-08-01 01:32:01
【问题描述】:

如何使用 Selenium 打印网页的所有 html/css 标签:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://seleniumhq.org/')

当我这样做时:

print(browser),

它打印这个:

"<selenium.webdriver.firefox.webdriver.WebDriver (session="ce01359c-03e4-499d-a3fb-230bda9ac24c")>"

这是一个对象或变量还是一个列表/集合/元组/字典或它是什么?有人可以解释一下吗?

【问题讨论】:

  • 它是一个对象(就像 Python 中的所有其他东西)。您选择将其分配给名为 browser 的变量。具体来说,该对象是selenium 包中定义的某个类的实例;它存在的主要目的是在其上调用诸如.get() 之类的记录方法,打印出对象本身并不是通常会做的事情。
  • 在代码中,浏览器持有由webdriver.Firefox()返回的Firefox驱动对象。调用 browser.get() 不会以任何方式更改“浏览器”。因此,当您打印“浏览器”时,它将打印该对象。您到底希望它打印什么?你打印它的目的是什么?
  • @jasonharper 谢谢,非常清楚。有没有办法打印“浏览器”的所有内容?不只是使用 browser.find_elements_by...(...) 寻找特定的东西?

标签: python selenium firefox geckodriver webdriver-w3c-spec


【解决方案1】:

你得到的结果是一个对象。在代码的开头,您选择调用此对象浏览器(也就是将其分配给变量)。然后,当您运行函数 browser.get() 时,它不会更改变量 browser 的内容,因此结果与您所在的网页无关。

【讨论】:

    【解决方案2】:

    您应该查看文档,特别是 this page,因为它提供了很好的介绍。如果您通过该解释工作,您应该对 API 的工作原理有一个很好的(基本)理解。附加章节可以填补关于在页面内定位元素的细节方面的空白。

    另一方面,如果你只是在抓取 HTML,我建议你看看 Beautiful Soup

    【讨论】:

      【解决方案3】:

      你没看错。根据New Session 的文档,New Session 命令会创建一个与端点节点的新 WebDriver 会话。

      HTTP Method     URI Template
      POST            /session
      

      按照远端步骤,整个过程完全取决于实现,但通常需要跟踪上游远端的sessionIdURLURL prefix。此外,

      • 会话 id 是生成 UUID 的结果。

      • 会话是会话 ID 为会话 ID 的新会话。

      因此,作为class selenium.webdriver.firefox.webdriver.WebDriver()对象浏览器会打印以下内容:

      "<selenium.webdriver.firefox.webdriver.WebDriver (session="ce01359c-03e4-499d-a3fb-230bda9ac24c")>"
      

      您可以在Values returned by webdrivers找到相关讨论

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多