自动刷新机器人不会点击元素
Auto refresh bot won't click on element
我正在尝试创建一个机器人,只要所需元素对 click/visible 可用,它就会自动刷新和停止。我已经完成了刷新部分,当机器人看到所需的元素时它就停止了,但我就是不明白为什么它不点击该元素:/
Error log
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path="C:\selenium drivers\chromedriver.exe")
driver.get("xxx")
driver.maximize_window()
click = driver.find_element_by_xpath('//*[@id="coiPage-1"]/div[2]/div[1]/button[1]')
click.click()
while True:
try:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button'))))
driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button').click()
break
except TimeoutException:
driver.refresh()
continue
- 我猜你使用的是非唯一定位器,所以
driver.find_element_by_xpath('xxx')
returns 你输入了错误的元素,所以点击它什么也没做。
要解决此问题,请验证您使用的 xxx
XPath 定位器是否唯一。
- 或者您可能过早地尝试点击该元素,因此它会为您提供
ElementClickInterceptedException
或类似内容。
为了给出更好的答案,我们需要查看您的实际代码,而不是 xxx
如果可能的话,包括错误回溯。
presence_of_element_located()
presence_of_element_located()
将 locator 作为参数而不是元素。
所以你需要改变:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('xxx'))))
如:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, "xxx")))
理想情况下,找到 clickable 元素并调用 click()
它,你需要诱导 WebDriverWait for the element_to_be_clickable()
and you can use the following :
while True:
try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "xxx"))).click()
break
except TimeoutException:
driver.refresh()
continue
我正在尝试创建一个机器人,只要所需元素对 click/visible 可用,它就会自动刷新和停止。我已经完成了刷新部分,当机器人看到所需的元素时它就停止了,但我就是不明白为什么它不点击该元素:/
Error log
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path="C:\selenium drivers\chromedriver.exe")
driver.get("xxx")
driver.maximize_window()
click = driver.find_element_by_xpath('//*[@id="coiPage-1"]/div[2]/div[1]/button[1]')
click.click()
while True:
try:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button'))))
driver.find_element_by_xpath('//*[@id="siteContainer"]/div[6]/div/div[3]/div[1]/div[2]/div/div/div[2]/div[2]/div[3]/div[2]/form/button').click()
break
except TimeoutException:
driver.refresh()
continue
- 我猜你使用的是非唯一定位器,所以
driver.find_element_by_xpath('xxx')
returns 你输入了错误的元素,所以点击它什么也没做。
要解决此问题,请验证您使用的xxx
XPath 定位器是否唯一。 - 或者您可能过早地尝试点击该元素,因此它会为您提供
ElementClickInterceptedException
或类似内容。
为了给出更好的答案,我们需要查看您的实际代码,而不是xxx
如果可能的话,包括错误回溯。
presence_of_element_located()
presence_of_element_located()
将 locator 作为参数而不是元素。
所以你需要改变:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((driver.find_element_by_xpath('xxx'))))
如:
element = WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, "xxx")))
理想情况下,找到 clickable 元素并调用 click()
它,你需要诱导 WebDriverWait for the element_to_be_clickable()
and you can use the following
while True:
try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "xxx"))).click()
break
except TimeoutException:
driver.refresh()
continue