如何使列表循环在selenium python中工作?

2024-04-20 06:49:28 发布

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

为了自动填充登录页面,我创建了一个代码来指示python尝试外部列表中的不同用户名,直到找到正确的用户名为止。但是当我运行代码时,它只尝试列表中的第一个用户名,然后停止。i、 e它不会尝试剩余的用户名值。请帮助我使脚本工作,因为我想。多谢各位

from selenium import webdriver

PATH = "C:\Program Files (x86)\chromedriver.exe"
webdriver = webdriver.Chrome(PATH)

webdriver.get("https://examplewebsite.com/login/index.php")


password = webdriver.find_element_by_id("password")
password.send_keys("Helloworld1@")

username = webdriver.find_element_by_id("username")
usernamefile = open("list.txt", "r")


for i in usernamefile:
        username.send_keys(i)
        submit = webdriver.find_element_by_id("loginbtn")
        submit.submit()

编辑:这是python显示的错误。我不知道怎么修理它

File "C:\Users\Ranjhaaa\Desktop\test.py", line 23, in <module>
    username.send_keys(i)
  File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py", line 477, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT,
  File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=87.0.4280.88)

Tags: inpysendlocalseleniumlineusernameelement
3条回答

selenium将对象passwordusername作为当前页面上元素的引用,当您单击按钮submit时,它将加载新页面,并且所有引用都将丢失-这将给出错误消息"element is not attached to the page document"

在每次重新加载页面之后,您必须再次使用find_element_by_id来访问字段passwordusername-因此您必须在for循环内执行此操作

usernamefile = open("list.txt", "r")

for i in usernamefile:
    password = webdriver.find_element_by_id("password")
    password.send_keys("Helloworld1@")

    username = webdriver.find_element_by_id("username")
    username.send_keys(i)

    submit = webdriver.find_element_by_id("loginbtn")
    submit.submit()
from selenium import webdriver

PATH = "C:\Program Files (x86)\chromedriver.exe"

usernamefile = open("list.txt", "r")


for i in usernamefile:
     webdriver = webdriver.Chrome(PATH)

     webdriver.get("https://examplewebsite.com/login/index.php")

     username = webdriver.find_element_by_id("username")

     password = webdriver.find_element_by_id("password")
     password.send_keys("Helloworld1@")
   
     username.send_keys(i)
     submit = webdriver.find_element_by_id("loginbtn")
     submit.submit()
     driver.quit()

如果用户名正确并登录,则密码和用户名字段不再可用。您可以退出驱动程序并在循环中重新开始

每当用户名出错时,加载下一页都会花费一些时间,如果它给了您not find element types错误,这意味着您只需要使用一些时间睡眠到代码的最后一个部分就可以正确地完成

相关问题 更多 >