gpt4 book ai didi

python - 为什么 selenium webdriver 在每次函数调用时都访问网络?

转载 作者:行者123 更新时间:2023-11-28 21:54:12 26 4
gpt4 key购买 nike

在 Python 中使用 selenium webdriver 编写了一个简单的测试函数:

from selenium import webdriver

def test_webdriver():
web = webdriver.PhantomJS()
web.get('http://example.com')
web.find_element_by_tag_name('html')
web.find_element_by_tag_name('head')
web.find_element_by_tag_name('meta')
web.find_element_by_tag_name('body')
web.find_element_by_tag_name('title')
web.find_element_by_tag_name('p')
web.find_element_by_tag_name('div')

这个函数花费的时间比预期的要长很多,所以我用 cProfile 分析了它并看到了一些像这样的行:

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
...
9 0.000 0.000 0.157 0.017 .../python2.7/urllib2.py:386(open)
...

这清楚地表明 webdriver 在我的测试函数中每次 find 调用时访问网络。

我认为 webdriver 使用 get() 一次且仅一次获取 DOM,然后在本地搜索和操作它,类似于 BeautifulSoup。显然它不是那样工作的,所以我有一些问题:

  • 这是 webdriver 的正常预期行为,还是我的配置错误?
  • 如果这是的正常行为,那么有没有办法强制 webdriver 在每次函数调用时访问网络?
  • 访问网络的目的是什么?它不可能在每次 find 时都刷新页面,那没有任何意义。

注意:我知道测试页面上的 javascript 可能会触发意外的网络调用,这就是我使用 http://example.com 的原因作为我的测试页,以消除这种可能性。

最佳答案

我相信 WebDriver 和浏览器之间的通信是通过网络连接进行的:https://code.google.com/p/selenium/wiki/JsonWireProtocol

因此,虽然它肯定不会向 example.com 发出九个请求,但它仍然可以向 WebDriver 发出九个本地网络请求 - 在您的示例中,一个用于配置浏览器,一个用于要求浏览器执行 GET,以及页面 DOM 中的七次查找。

应该有一些方法可以让您的 WebDriver 客户端库记录它对浏览器所做的实际调用。

关于python - 为什么 selenium webdriver 在每次函数调用时都访问网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com