scrapy 是否可以在Selenium中加快move_to_element()的速度,或者其他替代方法是什么?

tyg4sfes  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(145)

在抓取网页时触发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函数吗?

bvn4nwqk

bvn4nwqk1#

虽然这是旧的。如果它帮助任何人...至少在Python selenium模块中,你可以通过在动作链上设置以下属性来设置鼠标移动的持续时间:

driver = webdriver.Firefox()
act = ActionChains(driver)
act.w3c_actions.pointer_action._duration = 0

默认值似乎设置为250。

mbskvtky

mbskvtky2#

有几件事:

  • onmouseoveronmouseover事件在将鼠标指针移动到图像上时执行JavaScript。示例:
<img onmouseover="bigImg(this)" src="smiley.gif" alt="Smiley">
  • 移动到元素(到元素):move_to_element()将鼠标移动到元素的中间。
  • 您测量的时间(即 ~0.55s)除了move_to_element(to_element)沿着,还涉及其他几项活动,例如:
  • action = ActionChains(driver)
  • action.perform()
  • print()等等。

现在值得一提的是,action_chains的方法默认确保所需的元素是DOM Tree中的is_displayed()和is_enabled()。
结论
考虑到上面提到的事实,~500-550 ms的时间跨度看起来非常优化。

相关问题