簡體   English   中英

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

[英]How to make the list loop working in selenium python?

為了自動填充登錄頁面,我創建了一個代碼來指示 python 從外部列表嘗試不同的用戶名,直到找到正確的用戶名。 但是當我運行代碼時,它只嘗試列表中的第一個用戶名,然后停止。 即它不會嘗試剩余的用戶名值。 請幫助我使腳本按我的意願工作。 謝謝你。

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)

每當用戶名出錯時,如果它給您找不到元素類型錯誤,則需要一些時間來加載下一頁,這意味着您只需要使用一些時間睡眠到最后的代碼才能正確執行

selenium保留您的 object passwordusername作為當前頁面上元素的參考,當您單擊按鈕submit時,它會加載新頁面並且所有參考都丟失 - 這會給出您的錯誤消息"element is not attached to the page document"

每次重新加載頁面后,您必須再次使用find_element_by_id來訪問字段passwordusername - 所以您必須在for -loop 內部進行

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()

如果用戶名正確並登錄,則密碼和用戶名字段不再可用。 您可以退出驅動程序並在循環中重新開始

從 selenium 導入 webdriver

file_path = "您的 chromedriver 的可執行路徑"

用戶名 = open("list.txt", "r")

對於用戶名中的 i:瀏覽器 = webdriver.Chrome(file_path)

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM