[英]Selenium find_element throwing exception even though the element exists
我的代碼:
soup = BeautifulSoup(driver.page_source,features="html.parser")
applications_domains = []
for card in soup.find_all("div", {"class":"ant-row"}):
for url in card.find_all("a"):
applications_domains.append(url.get("href"))
for aplications_domain in aplication_domains:
try:
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,"//a[@href='" +
applications_domain + "']")))
driver.find_element_by_xpath("//a[@href='" + applications_domain + "']").click()
except:
soup = BeautifulSoup(driver.page_source,features="html.parser")
print(soup.find_all("a",{"href":applications_domain}))
print(f"test error {applications_domain}")
print("-----------------------")
我對find_element_by_xpath
有一個問題,即使它存在也找不到元素。 如果確實存在該元素,我使用soup
進行了雙重檢查,並且它按照 output 進行。
Output:
<a href="applications_domain"><b></b></a>
test error applications_domain
我有一個循環遍歷每個應用程序域(包含來自每個href
的數據)但是,它大多數時候會找到並單擊a href
元素,但對於某些人來說卻沒有,我不知道為什么。
這是網站 html。 有很多div id="application_name_list"
並且每個都包含我需要單擊的不同a href
<div class="ant-row" style="margin-left: -6px; margin-right: -6px;">
<div id="application_name_list" class="ant-col-8 dyff-home-app-search-result-item" style="padding-left: 6px; padding-right: 6px;">
<a href="/dyfflaunch/domain/gco/app/di_data_customer_experience_conversation_processor/features">di_data_customer_experience_conversation_processor<b></b></a>
</div>
<div id="application_name_list" class="ant-col-8 dyff-home-app-search-result-item" style="padding-left: 6px; padding-right: 6px;">
<a href="/dyfflaunch/domain/gco/app/di_kafka_configservice_agentqueuegroup_dim_v1-prod/features">di_kafka_configservice_agentqueuegroup_dim_v1-prod<b></b></a>
</div>
<div id="application_name_list" class="ant-col-8 dyff-home-app-search-result-item" style="padding-left: 6px; padding-right: 6px;">
<a href="/dyfflaunch/domain/gco/app/di_kafka_configservice_phoneinventory_dim_v1-prod/features">di_kafka_configservice_phoneinventory_dim_v1-prod<b></b></a>
</div>
</div>
enter code here
這是一種非常通用的方法:
a_tags=driver.find_elements_by_xpath("//div[@id='application_name_list']//a")
for a_tag in a_tags:
a_tag.click()
如果您有示例不起作用,請在問題中添加一個。
我建議使用 WebDriverWait() 並等待visibility_of_all_elements_located
() 然后使用以下 css 選擇器單擊。
driver.get("url here")
WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".ant-row")))
for link in driver.find_elements_by_css_selector(".ant-row>#application_name_list>a[href]"):
link.click()
如果你想用漂亮的湯和 selenium 來做到這一點,那就試試這個。
driver.get("url here")
WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".ant-row")))
soup = BeautifulSoup(driver.page_source,features="html.parser")
applications_domains = []
for url in soup.select(".ant-row>#application_name_list>a[href]"):
applications_domains.append(url['href'])
for applications_domain in applications_domains:
try:
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//a[@href='" + applications_domain + "']")))
driver.find_element_by_xpath("//a[@href='" + applications_domain + "']").click()
except:
soup = BeautifulSoup(driver.page_source,features="html.parser")
print(soup.find_all("a",{"href":applications_domain}))
print("test error {applications_domain}")
print("-----------------------")
該問題是由重疊引起的,並按照解決方案返回的錯誤消息為selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point
但由於我對錯誤處理的了解不足,錯誤未顯示為預期的。 謝謝大家的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.