使用Python脚本编写Selenium

2024-04-20 08:12:50 发布

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

我刚接触python。已尝试此示例测试脚本。你知道吗

from selenium import webdriver

def browser():

        driver= webdriver.Firefox()
        driver.delete_all_cookies()
        driver.get('http://www.gmail.com/')
        driver.maximize_window()
        driver.save_screenshot('D:\Python Programs\Screen shots\TC_01.png')
        driver.find_element_by_xpath("//*[@id='next']").click()
        message=driver.find_element_by_xpath("//*[@id='errormsg_0_Email']")
        driver.save_screenshot('D:\Python Programs\Screen shots\TC_03.png')
        name= driver.find_element_by_xpath("//*[@id='Email']").send_keys('gmail')
        driver.save_screenshot('D:\Python Programs\Screen shots\TC_02.png')
        print name
        driver.find_element_by_xpath("//*[@id='next']").click()
        password=driver.find_element_by_xpath("//*[@id='Passwd']").send_keys('password')
        driver.save_screenshot('D:\Python Programs\Screen shots\TC_03.png')
        print password
        driver.find_element_by_xpath("//*[@id='signIn']").click()
        driver.implicitly_wait(10)
        driver.quit()
i=browser()

直到下面的步骤脚本运行之后,我得到的错误如下

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//*[@id='Passwd']"}
Stacktrace:. 

Tags: idbypngsavedriverpasswordelementfind
2条回答

您应该在单击密码按钮之前添加一个等待,因为它是在延迟之后出现的

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//*[@id='Passwd']"))
)

更好的是,您应该在脚本开始时将implicit wait配置到驱动程序,而不是在脚本结束时。你知道吗

driver = webdriver.Firefox()
driver.implicitly_wait(10)
def browser():

        driver= webdriver.Firefox()
        driver.delete_all_cookies()
        driver.get('http://www.gmail.com/')
        driver.maximize_window()
        driver.implicitly_wait(5)
        driver.save_screenshot('/home/webner/Pictures/Gmail_Scrshts/TC_01.png')
        #driver.find_element_by_xpath("//*[@id='next']").click()
        #message=driver.find_element_by_xpath("//*[@id='errormsg_0_Email']")
        driver.save_screenshot('/home/webner/Pictures/Gmail_Scrshts/TC_03.png')
        driver.implicitly_wait(3)
        name = driver.find_element_by_name("identifier")
        name.send_keys("Email") # enter correct email to avoid error
        driver.save_screenshot('/home/webner/Pictures/Gmail_Scrshts/TC_02.png')
        print(name)
        driver.implicitly_wait(3)
        driver.find_element_by_class_name("CwaK9").click()
        password = driver.find_element_by_xpath("//*[@id='password']/div[1]/div/div[1]/input")
        password.send_keys("Password") # enter correct password to avoid error
        driver.save_screenshot('/home/webner/Pictures/Gmail_Scrshts/TC_03.png')
        driver.implicitly_wait(3)
        print(password.text)
        driver.find_element_by_id('passwordNext').click()
        driver.implicitly_wait(5)
        driver.quit()
i=browser()

注释的行(带有#)应该被注释或者从您自己的代码中删除。你知道吗

  1. 在第一行中,您在填写电子邮件之前单击“下一步”按钮。你知道吗
  2. 第二个注释行中的元素不可用。你知道吗

将文件夹路径更改为要保存屏幕截图的位置。你知道吗

某些元素的值需要更改。我已经更新了它们,它们工作得非常好。你可以直接使用它们。我建议在inspect元素中找到这些精确值的位置,以增强您的知识。你知道吗

相关问题 更多 >