簡體   English   中英

Python / Selenium:單擊此特定按鈕的不同方法

[英]Python/Selenium:Different ways to click this specific button

我剛從使用VBA切換過來時,試圖從總體上理解Python。 我對您解決此單個問題的可能方式感興趣。 我已經通過直接直接轉到鏈接來解決它,但是我需要在這里理解和應用。

from selenium import webdriver

chromedriver = r'C:\Users\dd\Desktop\chromedriver.exe'
browser = webdriver.Chrome(chromedriver)
url = 'https://www.fake.com/'

browser.get(url)

browser.find_element_by_id('txtLoginUserName').send_keys("Hello")
browser.find_element_by_id('txtLoginPassword').send_keys("There")
browser.find_element_by_id('btnLogin').click()

在這一點上,我試圖導航到特定的按鈕/鏈接。 這是頁面/元素中的信息

 <a href="javascript:void(0)" style="text-decoration:none" onclick="InitiateCallBack('187', 'True', 'T-Mobile', 'https://www.fake.com/', 'TMobile')">T-Mobile</a>

這是我嘗試過的一些方法:

for elem in browser.find_elements_by_xpath("//*[contains(text(), 'T-Mobile')]"):
    elem.click

browser.execute_script("InitiateCallBack(187, True, T-Mobile, https://www.fake.com/, TMobile)")

我也試圖尋找標簽並使用css選擇器,但我出於沮喪而刪除了所有這些標簽!

具體問題

  1. 如何利用內文“ T-Mobile”單擊按鈕?
  2. 我將如何執行onclick事件?

我嘗試閱讀以下鏈接,但仍未成功以其他方式輸入。 部分原因可能是因為我還不了解特定的語法。 這只是我看過的東西。 我來這里之前花了大約3個小時嘗試各種事情!

硒python onclick()提供了StaleElementReferenceException http://selenium-python.readthedocs.io/locating-elements.html Python:硒來模擬onclick https://stackoverflow.com/questions/43531654/simulate-a-onclick-with- selenium-https://stackoverflow.com/questions/45360707/python-selenium-using-onclick 使用Python在Selenium中運行javascript

如何利用內文“ T-Mobile”單擊按鈕?

find_elements_by_link_text適用於這種情況。

elements = driver.find_elements_by_link_text('T-Mobile')
for elem in elements:
    elem.click()

如果您沒有完整的確切文本,也可以使用by_partial_link_text定位器。

我將如何執行onclick事件?

最簡單的方法是如上所述對元素簡單地調用.click() ,並且該事件自然應該在那個時候執行。

另外,您可以檢索onclick屬性並使用driver.execute_script運行js。

for elem in elements:
    script = elem.get_attribute('onlcick')
    driver.execute_script(script)

編輯:

請注意,在您的代碼中您執行了element.click -這沒有任何作用。 element.click() (請注意括號)將調用click方法。

有沒有辦法利用browser.execute_script()進行onclick事件

execute_script可以觸發等效事件,但是這樣做可能會遺漏更多的偵聽器。 使用元素單擊方法最有效。 該站點上可能有很多實施細節,可能會妨礙您的自動化工作,但這些可能性是無窮的。 沒有看到實際的背景,很難說。
可以使用JS方法單擊元素或以其他方式與頁面進行交互,但是您可能會錯過某些在“正常”使用網站時發生的事件偵聽器; 您想要或多或少地模仿正常使用情況。

根據您共享的HTML ,很明顯該網站使用JavaScript 因此,要在文本為T-Mobile的鏈接上click() ,必須使用expected_conditions子句作為element_to_be_clickable來誘導WebDriverWait ,並且可以使用以下代碼塊:

WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.XPATH, "//a[contains(.,'T-Mobile')]"))).click()

你可以用它

 <div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
    <input class="v_small" type="button"></input>
    <span>
          Reset
    </span>

暫無
暫無

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

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