如何解决For循环硒-未完成的任务
我正在执行一个能够共享信息的自动化机器人。但是,执行任务超过3次时,出现错误,程序停止工作。我不确定为什么我的代码能够执行3次任务然后停止。
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as ECDS
import time
driver = webdriver.Chrome()
driver.get("https://www.poshmark.com") #Open webpage
Log_Field=(By.XPATH,"//a[contains(text(),'Log in')]")
Email= (By.XPATH,"//input[@placeholder='Username or Email']")
Pass= (By.XPATH,"//input[@placeholder='Password']")
Second_Log= (By.XPATH,"//button[@class='btn btn--primary']")
SF = (By.XPATH,"//img[@class='user-image user-image--s']")
MyCloset = (By.XPATH,'My Closet')]")
WebDriverWait(driver,20).until(EC.element_to_be_clickable(Log_Field)).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable(Email)).send_keys("xx@xx.com")
driver.find_element_by_xpath("//input[@placeholder='Password']").send_keys("xxx")
driver.find_element_by_xpath("//button[@class='btn blue btn-primary']").click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable(SF)).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable(MyCloset)).click()
for i in range(100):
driver.find_element_by_tag_name('body').send_keys(Keys.END)#Use send_keys(Keys.HOME)
driver.find_element_by_xpath("//div[6]//div[1]//div[2]//div[3]//i[1]").click()
driver.find_element_by_xpath("//div[@class='share-wrapper-container']").click()
driver.refresh()
time.sleep(20)
我得到的错误如下:
Traceback (most recent call last):
File "/home/pi/Documents/Bot_Poshmark.py",line 27,in <module>
driver.find_element_by_xpath("//div[6]//div[1]//div[2]//div[3]//i[1]").click()
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webelement.py",line 80,in click
self._execute(Command.CLICK_ELEMENT)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webelement.py",line 633,in _execute
return self._parent.execute(command,params)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/webdriver.py",line 321,in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/remote/errorhandler.py",line 242,in check_response
raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <i class="icon share-gray-large"></i> is not clickable at point (870,163). Other element would receive the click: <div class="tile col-x12 col-l6 col-s8 p--2">...</div>
(Session info: chrome=78.0.3904.108)
有什么想法为什么我的代码只能运行不超过3次? 谢谢
解决方法
在测试硒Web自动化时,我几次遇到相同的问题。异常表明,该对象不可单击。这意味着您必须更深入地研究HTML树,以找到始终可单击的元素。如果您将鼠标悬停在HTML行上,Chrome会向您显示相应的网站。
但是,如果不能这样做,请尝试让您的代码sleep()
有点:-)
您可以在一定时间内完成操作
或者您按照以下说明使用WebDriverWait()
:
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"your XPATH"))).click()
(您错过了一个()
,这应该可以消除您的错误:不使用:参数1 = self
[Python时要记住这一点!!],参数2 = By.XPATH
和3 = {{ 1}}。使用"the xpath"
,参数2和3在一起)
()
需要一个WebDriverWait()
参数,因为timeout
不知道该元素是否存在。但是您可以轻松创建自己的selenium
。 注意:您必须知道该元素存在,否则将陷入无限循环。
这是代码:
waiting-method
它将尝试查找元素,并在找到该元素时将其返回。 您可以像这样使用它:
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
def wait_for(driver,method):
"""Calls the method provided with the driver"""
while True:
try:
element = method(driver)
if element:
return element
except:
pass
sleep(0.5)
免责声明:这段代码并不完全是我创建的。我修改了硒源代码,使其符合我们的需求:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。