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

如何使列表循环在selenium python中工作?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,为了自动填充登录页面,我创建了一个代码来指示python尝试外部列表中的不同用户名,直到找到正确的用户名为止。但是当我运行代码时,它只尝试列表中的第一个用户名,然后停止。i、 e它不会尝试剩余的用户名值。请帮助我使脚本工作,因为我想。多谢各位 from selenium import webdriver PATH = "C:\Program Files (x86)\chromedriver.exe" webdriver = webdriver.Chrome(PATH) w

为了自动填充登录页面,我创建了一个代码来指示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)
文件“C:\Users\Ranjhaaa\Desktop\test.py”,第23行,在
用户名。发送密钥(i)
文件“C:\Users\ranjhaa\AppData\Local\Programs\Python\Python39\lib\site packages\selenium\webdriver\remote\webelement.py”,第477行,在发送密钥中
self.\u execute(Command.SEND\u KEYS\u到\u元素,
文件“C:\Users\ranjhaa\AppData\Local\Programs\Python\Python39\lib\site packages\selenium\webdriver\remote\webelement.py”,第633行,在\ u execute
返回self.\u parent.execute(命令,参数)
文件“C:\Users\ranjhaa\AppData\Local\Programs\Python\Python39\lib\site packages\selenium\webdriver\remote\webdriver.py”,执行中第321行
self.error\u handler.check\u响应(响应)
文件“C:\Users\ranjhaa\AppData\Local\Programs\Python\Python39\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第242行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.StaleElementReferenceException:消息:stale元素引用:元素未附加到页面文档
(会话信息:chrome=87.0.4280.88)

每当用户名出错时,如果它给你找不到元素类型错误,则需要一段时间来加载下一页,这意味着你只需要在最后一段代码中使用一段时间来进行正确操作

每当用户名出错时,如果它给你找不到元素类型错误,则需要一段时间来加载下一页这意味着您只需在最后一段代码前使用一段时间睡眠就可以正确地执行操作

selenium
将您的对象
密码
用户名
作为当前页面上元素的引用,当您单击按钮
提交
时,它会加载新页面,并且所有引用都会丢失-这会给出错误消息
“元素未附加到页面文档”

每次重新加载页面后,您必须再次使用
find\u element\u by\u id
来访问字段
password
username
-因此您必须在
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()

selenium
将对象
密码
用户名
作为当前页面上元素的参考,当您单击按钮
提交
时,它将加载新页面,所有参考都将丢失-这将显示错误消息
“元素未附加到页面文档”

每次重新加载页面后,您必须再次使用
find\u element\u by\u id
来访问字段
password
username
-因此您必须在
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()
如果用户名正确并登录,则密码和用户名字段不再可用。您可以退出驱动程序并在循环中重新启动


如果用户名正确且已登录,则密码和用户名字段将不再可用。您可以退出驱动程序,然后从selenium import webdriver在循环中重新启动

file_path=“chromedriver的可执行路径”

Usernames=open(“list.txt”、“r”)

对于用户名中的i: browser=webdriver.Chrome(文件路径)


从selenium导入webdriver

file_path=“chromedriver的可执行路径”

Usernames=open(“list.txt”、“r”)

对于用户名中的i: browser=webdriver.Chrome(文件路径)


我不熟悉编码。您能通过在代码中进行更正来说明您的建议吗?谢谢。我不熟悉编码。您能通过在代码中进行更正来说明您的建议吗?谢谢堆栈保留当前页面上的元素引用,当您单击按钮
submit
时,它将加载新页面和所有引用e丢失-这会给出错误消息。每次重新加载后,您必须再次使用
按id查找元素
,以访问字段
密码
用户名
-因此您必须在用户名文件中的
中为i执行此操作:
@furas您能在原始代码中显示这些添加内容吗?实际上是n对于编码,对于如何以及在何处进行您建议的有用更改,我有点困惑。谢谢。我将其添加为下面的答案,以便您可以将我的答案标记为已接受,稍后您可以对其进行更新投票。@furas您的答案已标记为已接受,并且将在堆栈保留当前页面上的元素并单击b时更新投票按钮
submit
,然后它加载新页面,所有引用都会丢失-这会给出错误消息。每次重新加载后,您必须再次使用
find_element_by_id
,以访问字段
密码
用户名
-因此您必须在用户名文件中的
中为i执行此操作:
@furas can请在原始代码中显示这些添加内容?实际上,我对编码还不熟悉,对于如何以及在何处进行您建议的有用更改,我有点困惑。谢谢您,我将其添加为下面的答案,以便您可以将我的答案标记为已接受,稍后您可以对其进行投票。@furas您的答案已标记为已接受,并且将很快进行投票N
 browser.get("https://examplewebsite.com/login/index.php")

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

 
 submit = webdriver.find_element_by_id("loginbtn")
 submit.submit() 
 # then close the driver and start again the loop
 browser.close()
 # also you can use the refresh function