簡體   English   中英

使用 Selenium 和 Python 自動登錄

[英]Automate Login with Selenium and Python

我正在嘗試使用Selenium登錄打印機並進行一些測試。 我對這個過程確實沒有太多經驗,並且發現它有些令人困惑。

首先,為了獲得我可能想要的值,我在 Chrome 中打開了打印機網頁並右鍵單擊“查看頁面源代碼”——結果證明這沒有幫助。 從這里我只能看到一堆調用一些 .js 腳本的<script>標簽。 我假設這是我問題的很大一部分。

接下來,我在右鍵單擊后選擇了“檢查”選項。 從這里我可以看到加載的實際 HTML。 我登錄了該站點並在 Chrome 中記錄了該過程。 有了這個,我能夠識別包含用戶名和密碼的變量。 我去HTML的這部分做了一個右鍵單擊並復制了Xpath。 然后我嘗試使用 Selenium find_element_by_xpath但仍然沒有運氣。 我已經嘗試了所有其他方法(按 ID 和名稱查找),但是它返回一個錯誤,指出找不到元素。

我覺得這里有一些我不理解的基本原理。 有人對這個有經驗么???

注意:我正在使用 Python 3.7 和 Selenium,但是如果有更優雅的方式來實現這一點,我不反對嘗試除 Selenium 之外的其他東西。

我的代碼看起來像這樣:

編輯這是我更新的代碼 - 我可以確認這不僅僅是時間/等待問題。 我已經成功地抓住了前兩個外部元素,但第二個我更深入它出錯了。

def sel_test():
    chromeOptions = Options()
    chromeOptions.add_experimental_option("useAutomationExtension", False)
    browser = webdriver.Chrome(chrome_options=chromeOptions)
    url = 'http://<ip address>/'
    browser.get(url)
    try:
        element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ccrx-root"]')))

    finally: browser.quit()

我想要的元素被埋在這個標簽中 - 也許這與它有關? 可能和這個帖子有關

<frame name="wlmframe" src="../startwlm/Start_Wlm.htm?arg11=">

您的問題很可能是因為該元素在您的機器人搜索它之后才加載到頁面上,或者是一個更改元素 xpath 的彈出窗口。

嘗試這個:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

delay = 3 # seconds
try:
    elementUsername = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.xpath, 'element-xpath')))

    element.send_keys('your username')

except TimeoutException:
    print("Loading took too much time!")

你可以在這里找到更多關於這個

正如在這篇文章中提到的,您只能使用所看到的當前幀。 您需要告訴 selenium 切換幀以訪問子幀。

例如: browser.switch_to.frame('wlmframe')

然后這將加載嵌套的內容,以便您可以訪問子項

暫無
暫無

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

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