在抓取网页时触发onmouseover事件的最快方法是什么?
所以我想把鼠标移到一个div元素上,然后这个div元素调用一个javascript函数来更新另一个div(显示一个工具提示,我想刮一下)。当把鼠标移离第一个div时,工具提示消失了,但是仍然可以刮一下,因为只有显示样式被设置为none。我想让这个过程尽可能快。
目前我使用Selenium和move_to_element,大约需要0.55秒。这是相当长的时间,因为我必须重复这个过程最终〉60次。
start_time = time.time()
action = ActionChains(driver)
action.move_to_element(box)
action.perform()
print("Time: ", time.time() - start_time()) # ~0.5s
当我在Scrapy shell中使用它时,我看到为这个selenium请求显示了以下消息。
[selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:57309/session/49aea696ad5c6a23dd1a292adacf1d92/actions {"actions": [{"parameters": {"pointerType": "mouse"}, "type": "pointer", "id": "mouse", "actions": [{"duration": 250, "x": 0, "type": "pointerMove", "y": 0, "origin": {"element-6066-11e4-a52e-4f735466cecf": "63f7afad-d9d6-49c2-989a-75c6d083c055"}}]}, {"type": "key", "id": "key", "actions": [{"duration": 0, "type": "pause"}]}]}
在“操作”处,显示“持续时间:250”,我怀疑这是move_to_element操作的持续时间。我找不到任何方法来手动减少这个持续时间,这可能吗?我也听说scrapy-splash比selenium快得多,但是还没有找到很多关于如何使用它的方法。它也可以模拟悬停事件,或者用正确的参数直接调用javascript函数吗?
2条答案
按热度按时间bvn4nwqk1#
虽然这是旧的。如果它帮助任何人...至少在Python selenium模块中,你可以通过在动作链上设置以下属性来设置鼠标移动的持续时间:
默认值似乎设置为250。
mbskvtky2#
有几件事:
onmouseover
事件在将鼠标指针移动到图像上时执行JavaScript。示例:move_to_element()
将鼠标移动到元素的中间。move_to_element(to_element)
沿着,还涉及其他几项活动,例如:action = ActionChains(driver)
action.perform()
print()
等等。现在值得一提的是,action_chains的方法默认确保所需的元素是DOM Tree中的is_displayed()和is_enabled()。
结论
考虑到上面提到的事实,
~500-550 ms
的时间跨度看起来非常优化。