我正在运行下面的代码,使用 selenium 在 python 中抓取网站:
def click_and_wait_for_additional_info(elem):
# Click on the store element to navigate to its individual page
elem.click()
time.sleep(2)
try:
features = driver.find_element(By.XPATH, '//*[@id="QA0Szd"]/div/div/div[1]/div[3]/div/div[1]/div/div/div[2]/div[6]/button/div[2]/div/div').text
except:
features = "None"
return features
每次我在大量观察上运行此代码时,都会给出错误 ElementClickInterceptedException
有什么建议可以处理吗?
我尝试了以下: a)driver.隐式等待 b) 下面的代码:
def click_and_wait_for_additional_info(elem):
try:
# Wait for the element to be clickable
clickable_elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="Nv2PK tH5CWc THOPZb "]')))
# Click on the store element to navigate to its individual page
clickable_elem.click()
time.sleep(2)
try:
features = driver.find_element(By.XPATH, '//*[@id="QA0Szd"]/div/div/div[1]/div[3]/div/div[1]/div/div/div[2]/div[6]/button/div[2]/div/div').text
except:
features = "None"
return category
except ElementClickInterceptedException:
print("Element click intercepted. Retrying...")
# Retry clicking on the element
try:
clickable_elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="Nv2PK tH5CWc THOPZb "]')))
clickable_elem.click()
time.sleep(2)
# Your code to extract additional info goes here...
except Exception as e:
print("Exception occurred:", e)
return None
except Exception as e:
print("Exception occurred:", e)
return None
但是在机器人中,当错误得到解决时,数据是: a) 移位 b) 不断重复
很有可能是定位器问题。
当尝试单击网页上的某个元素被另一个元素阻止时,通常会引发ElementClickInterceptedException 异常。当另一个元素重叠或完全/部分位于您尝试单击的 DOM 元素前面时,可能会发生这种情况。
我建议您检查一下您的定位器。不要使用绝对路径,它们确实不可靠且不稳定。请改用相对 xpath。请参阅本文了解差异。
另外,不要过多依赖@class属性。特别是如果有很多“单词”。开发人员经常可以轻松更改类值顺序以及值本身。另一点是价值观。像“QA0Szd”或类“Nv2PK”这样的 ID 通常由前端框架自动创建。通常,它们是动态的,因此最好不要使用此类属性,除非您信任页面源。
基本上,一个好的定位器+显式等待(EC.element_to_be_clickable)应该可以满足您的情况。
但如果它没有帮助,请尝试
单击操作。