使用Python Selenium自动注册LinkedIn,在定位email、password以及agree和continue元素时遇到问题

2024-03-28 16:50:06 发布

您现在位置:Python中文网/ 问答频道 /正文

def test_SignUp(self):
    self.driver = webdriver.Chrome(r"C:\Users\User\PycharmProjects\LinkedinApp\Resources\chromedriver.exe")
    self.driver.get("https://www.linkedin.com/")
    driver = self.driver
    join_now = "Join now"
    first_name = "firstName"
    last_name = "lastName"
    email = ".//*[@id='join-email']"
    password = "join-password"
    agree_and_join = '//*[@id="submit-join-form-text"]'

    join_now_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_link_text(join_now))
    first_name_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_name(first_name))
    last_name_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_name(last_name))

    email_element = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(email))
    password_element = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_id(password))
    agree_and_join_element = WebDriverWait(driver, 5).until( lambda driver: driver.find_element_by_name(agree_and_join))

    join_now_element.click()
    first_name_element.clear()
    first_name_element.send_keys("John")
    last_name_element.clear()
    last_name_element.send_keys("Doe")
    email_element.clear()
    email_element.send_keys("ndlovug23221@gmail.com")
    password_element.clear()
    password_element.send_keys("John@123")
    agree_and_join_element.click()
    #time.sleep(10)
def tearDown(self):
    self.driver.quit()

if __name__ == '__main__':
    unittest.main()

(请看我的一些错误)

File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\unittest\case.py", line 628, in run
    testMethod()
  File "C:\Users\User\PycharmProjects\LinkedinApp\TestLinkedin.py", line 28, in test_SignUp
    email_element = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(email))
  File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

Tags: lambdanameselfbyemaildriverpasswordelement
1条回答
网友
1楼 · 发布于 2024-03-28 16:50:06

你的定位策略没有错,我认为你错误的放置了WebDriverWait电子邮件定位.//*[@id='join-email'],这个定位在你点击Join now之后出现。您可以尝试以下代码:

join_now_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_link_text(join_now))

join_now_element.click()

#first_name_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_name(first_name))
#last_name_element = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_name(last_name))
email_element = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(email))
#password_element = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_id(password))
#agree_and_join_element = WebDriverWait(driver, 5).until( lambda driver: driver.find_element_by_name(agree_and_join))

看起来你不需要等待first_name_elementlast_name_elementpassword_elementagree_and_join_element,它已经由email_element表示了

相关问题 更多 >