Selenium Automation – 交互问题

我正在开发一个能够登录网页 ( postmark.com) 的机器人。为此,我使用了 selenium 和 python。现在我的代码能够访问网页,点击登录按钮,输入用户名和密码;然而,当点击登录点击(访问帐户)时,我收到以下错误


Traceback (most recent call last):

  File "/home/pi/Documents/Bot_Poshmark.py", line 20, in <module>

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Log)).click()

  File "/usr/local/lib/python3.7/dist-packages/selenium/webdriver/support/wait.py", line 80, in until

    raise TimeoutException(message, screen, stacktrace)

selenium.common.exceptions.TimeoutException: Message:

奇怪的是,有时(比如 2 或 3)我编写的同一段代码可以完成所有步骤。这是我的代码(我为此使用 Raspberry Pi 4)


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 EC


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']")

Log= (By.XPATH, "//button[@class='btn btn--primary']")


WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Log_Field)).click()

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Email)).send_keys("xxx@xx.com")

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Pass)).send_keys("123456")

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Log)).click()

有谁知道为什么会这样?谢谢


守候你守候我
浏览 69回答 1
1回答

慕桂英4014372

要将字符序列发送到用户名或电子邮件和密码 字段,您需要引入WebDriverWait并且element_to_be_clickable()您可以使用以下任一定位器策略:使用CSS_SELECTOR:driver.get("https://poshmark.com/")WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href='/login']"))).click()WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#login_form_username_email"))).send_keys("xxx@xx.com")driver.find_element_by_css_selector("input#login_form_password").send_keys("123456")driver.find_element_by_css_selector("button.btn.blue.btn-primary").click()使用XPATH:driver.get("https://poshmark.com/")WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[text()='Log in']"))).click()WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='login_form_username_email']"))).send_keys("xxx@xx.com")driver.find_element_by_xpath("//input[@id='login_form_password']").send_keys("123456")driver.find_element_by_xpath("//button[@class='btn blue btn-primary']").click()注意:您必须添加以下导入:from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as EC这个用例在这个用例中,行:WebDriverWait(driver, 20).until(EC.element_to_be_clickable(Log)).click()无法在所需的时间范围内识别所需的元素,因此您遇到了TimeoutException。然而,从TimeoutException中很难挖掘出失败的实际结果。解决方案作为了解失败确切原因的解决方案,您需要删除 WebDriverWait并将代码行替换为:find_element_by_class_name(name)find_element_by_css_selector(css_selector)find_element_by_id(id)find_element_by_link_text(link_text)find_element_by_name(name)find_element_by_partial_link_text(partial_link_text)find_element_by_tag_name(tag_name)find_element_by_xpath(xpath)如果需要,您可以在调试时减慢搜索诱导等待的速度time.sleep(secs)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python