如何解决for循环中的硒过时元素引用 我用的是 Windows10,Chrome 版本 89.0.4389.9,vscode,python我们会找到答案像我们一样
我用的是 Windows10,Chrome 版本 89.0.4389.9,vscode,python
Future<void> main() async {
// Do whatever you need to do here
final home = await createHomeWidgetDependingOnAsyncResult();
return runApp(MyApp(home: home));
}
table = driver.find_element_by_xpath('//*[@id="frm"]/table')
tbody = table.find_element_by_tag_name("tbody")
rows = tbody.find_elements_by_tag_name("tr")
# btns = driver.find_element_by_xpath('//*[@id="frm"]/table/tbody/tr[*]/td[2]/a')
for index,value in enumerate(rows):
body=value.find_elements_by_tag_name("td")[1]
body.click()
sleep(2)
driver.back()
sleep(2)
解决方法
我不使用 selenium,但我认为问题在于该元素不再位于 DOM 中。要解决此问题,您可以使用“try”块。
try:
body=value.find_elements_by_tag_name("td")[1]
#some code
except:
pass
,
似乎我找到了解决方案,但可以保护它是最好的,会更深入地研究它:
elements = driver.find_elements(By.CSS_SELECTOR,'div.g')
for n,el in enumerate(elements):
elements = driver.find_elements(By.CSS_SELECTOR,'div.g')
elements[n].click()
time.sleep(1)
driver.back()
time.sleep(1)
driver.quit()
尝试查找元素,然后移动开始循环并找到相同的结果,并通过枚举函数中的项目编号从该循环中获取项目。
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
def company_info(driver):
com_name = driver.find_element_by_xpath('Enter your site xpath')
print(com_name.text)
com_addr = driver.find_element_by_xpath('Enter your site xpath')
print(com_addr.text)
com_tel = driver.find_element_by_xpath('Enter your site xpath')
print(com_tel.text)
com_fax = driver.find_element_by_xpath('Enter your site xpath')
print(com_fax.text)
driver = webdriver.Chrome()
url_search = 'Enter your site URL'
#input values
web_open_wait = 5
web_close_wait = 3
driver.get(url_search)
sleep(web_open_wait)
check_names = driver.find_elements_by_xpath('//*[@id="frm"]/table/tbody/tr[1]/td/a'
for n,el in enumarate(check_names,start=1):
check_names = driver.find_elements_by_xpath('//*[@id="frm"]/table/tbody/tr[%d]/td/a' % n)
check_name[el].click()
company_info(driver)
driver.back()
driver.quit()
,
我们会找到答案。像我们一样
我在想我刚刚放在上面的代码,当我考虑如何修复@Vovo时,我想出了这个方法,这是您给我的提示之一,行不能重复出现。 它看起来不漂亮,但效果很好。
(因为我打开的网站不能点击控件,所以很难用两个驱动。)
无论如何。分享。希望对看到的人有所帮助。
我想做的是, 输入包含公司信息的站点, 在公开的信息中, 我试图提取公司名称、地址、联系信息和传真号码。
操作顺序为: 站点访问> 设置所需数据的xpath 路径> 单击> 提取> 结束站点
重复这个循环 随心所欲
作为参考,我打开的网站就像 Control + Cilck 或类似的东西。如果单击它,则必须无条件加载元素。回去或前进,所以它一直在伤害。 打开它并提取它并关闭它并提取它并关闭它会很舒服。 如果有任何改进,请告诉我
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
def company_info():
com_name = driver.find_element_by_xpath('Enter your site xpath')
print(com_name.text)
com_addr = driver.find_element_by_xpath('Enter your site xpath')
print(com_addr.text)
com_tel = driver.find_element_by_xpath('Enter your site xpath')
print(com_tel.text)
com_fax = driver.find_element_by_xpath('Enter your site xpath')
print(com_fax.text)
num_add = 0
while True:
driver = webdriver.Chrome()
url_search = 'Enter your site URL'
#input values
web_open_wait = 5
web_close_wait = 3
# Url Open
driver.get(url_search)
sleep(web_open_wait)
# Collect info
num_add += 1
check_name = driver.find_element_by_xpath('//*[@id="frm"]/table/tbody/tr[{0}]/td[2]/a'.format(num_add))
check_name.click()
sleep(web_open_wait)
company_info()
# Url Close
driver.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。