我在python中使用Selenium来测试数据表(不是真正的html表,由多个div组合)
那是我的桌子的样子:
<div class="products">
<div class="product">
<span class="original-price">20$</span>
<span class="discounted-price">10$</span>
</div>
<div class="product">
<span class="price">20$</span>
</div>
...
</div>
有多种产品,有些产品有折扣价。
这是我的剧本:
products = self.driver.find_elements_by_css_selector('.products > div')
for product in products:
found_price = True
try:
original_price = product.find_element_by_css_selector('.original-price').text
reduced_price = product.find_element_by_css_selector('.discounted-price').text
except NoSuchElementException:
try:
original_price = product.find_element_by_css_selector('.price').text
reduced_price = original_price
except NoSuchElementException:
found_price = False
if found_price: check_price(original_price, reduced_price)
但是我的脚本运行得很慢。它发送了很多请求&#34; remote_connection&#34;每次&#34; find_element_by_css_selector&#34;像这样叫:
2018-02-27 13:48:08 [selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:62147/session/14902b71a0f812fa74f81524f0eb1386/elements {"using": "css selector", "sessionId": "14902b71a0f812fa74f81524f0eb1386", "value": ".products > div .original-price"}
2018-02-27 13:48:08 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
有任何改善其表现的想法吗?
谢谢!
答案 0 :(得分:0)
删除WebDriver的其中一个参数是\b
。正如医生所说:
keep_alive
保持连接活动会提高速度,因为它不必连接每个查找请求。
答案 1 :(得分:0)
为什么您认为脚本运行速度非常慢仍然不同寻常。正如您所提到的,代码每次remote_connection
完全按照WebDriver-W3C Candidate Recommendation
中定义的方式发送大量请求find_element_by_css_selector
。
使用Search Box
的{{1}}进行小型测试,即Google Home Page
,其中包含 WebDrivers 和 Web浏览器的所有主要变体那个:
每次在 HTML DOM 中搜索webelement时,如下所示:
https://www.google.co.in
生成以下请求:
product.find_element_by_css_selector('.original-price')
在成功搜索时,将从 Web浏览器发回以下响应:
[selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:62147/session/14902b71a0f812fa74f81524f0eb1386/elements {"using": "css selector", "sessionId": "14902b71a0f812fa74f81524f0eb1386", "value": ".products > div .original-price"}
[selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
您可以在Values returned by webdrivers
中找到详细的讨论但是,根据您使用的Locator Strategy,性能会有一些偏差。
有很多关于定位器性能方面的实验和基准测试。你可以在这里找到一些讨论: