【问题标题】:Cannot click and hold element in selenium无法单击并按住硒中的元素
【发布时间】:2021-03-08 03:23:07
【问题描述】:

我想点击并按住网页中的栏并将其向右移动。

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.Ie('IEDriverServer.exe')
url = 'https://verify.meituan.com/v2/web/general_page?action=spiderindefence&requestCode=507e224b8f0f447793ad3a03830984c8&platform=1000&adaptor=auto&succCallbackUrl=https%3A%2F%2Foptimus-mtsi.meituan.com%2Foptimus%2FverifyResult%3ForiginUrl%3Dhttp%253A%252F%252Fwww.dianping.com%252Fsearch%252Fkeyword%252F1%252F0_%2525E5%252590%25258D%2525E5%252588%25259B%2525E4%2525BC%252598%2525E5%252593%252581%252F10&theme=dianping'
browser.get(url)
slider = browser.find_element_by_xpath("//div[@id='yodaBoxWrapper']//div[@id='yodaMoveingBar']")
ActionChains(browser).click_and_hold(slider).move_by_offset(xoffset=50, yoffset=0).perform()

条不移动。

我的代码有什么问题?

非常感谢。

【问题讨论】:

  • 只需将chrome 选项替换为ie 选项。添加用户代理。在获取 url 后添加 time.sleep。而已。 from selenium.webdriver.ie.options import Options
  • 您可能需要等待滑块可点击。但是,无论如何,您将无法完成验证码,因为这些操作应该被识别为基于脚本的
  • 我尝试在 5 分钟后执行代码,但条形图没有移动。
  • @Chan 你添加了用户代理吗?
  • @阿布拉尔·艾哈迈德。我还没有添加用户代理。

标签: python selenium


【解决方案1】:

在您的代码中,您尝试对 web 元素进行一些操作,如果您手动查看网站的加载方式,您会发现在页面上呈现 HTML 组件需要时间。

您需要等到元素在页面上呈现并进行额外检查以确保其可点击,您可以使用以下代码执行此操作。有关最佳实践的完整列表,请查看this answer

slider = WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, "//div[@id='yodaBoxWrapper']//div[@id='yodaMoveingBar']")))
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='yodaBoxWrapper']//div[@id='yodaMoveingBar']")))
ActionChains(browser).click_and_hold(slider).move_by_offset(xoffset=200, yoffset=0).perform()

下面是完整代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Ie('IEDriverServer.exe')
url = 'https://verify.meituan.com/v2/web/general_page?action=spiderindefence&requestCode=507e224b8f0f447793ad3a03830984c8&platform=1000&adaptor=auto&succCallbackUrl=https%3A%2F%2Foptimus-mtsi.meituan.com%2Foptimus%2FverifyResult%3ForiginUrl%3Dhttp%253A%252F%252Fwww.dianping.com%252Fsearch%252Fkeyword%252F1%252F0_%2525E5%252590%25258D%2525E5%252588%25259B%2525E4%2525BC%252598%2525E5%252593%252581%252F10&theme=dianping'
browser.maximize_window()
browser.get(url)
slider = WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, "//div[@id='yodaBoxWrapper']//div[@id='yodaMoveingBar']")))
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='yodaBoxWrapper']//div[@id='yodaMoveingBar']")))
ActionChains(browser).click_and_hold(slider).move_by_offset(xoffset=200, yoffset=0).perform()

【讨论】:

  • 忘了提到我已经使用IE 11 和IE 驱动程序版本3.150.1.0 (32 bit) 来测试它并且它工作正常,如果你能详细说明你是否得到任何错误?
  • 我使用的是 IE 11。代码成功完成但条不移动
猜你喜欢
  • 2018-11-21
  • 2022-01-18
  • 2016-08-23
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2017-07-29
  • 1970-01-01
相关资源
最近更新 更多