簡體   English   中英

Selenium xpath與Python firefox驅動程序的鏈接未單擊

[英]Selenium xpath links with Python firefox driver not clicking

我需要有關上述主題的幫助。 我要附上一個屏幕截圖,該圖像在登錄和單擊幾次后仍停留在網頁上。 chromedriver和gekodriver都存在相同的問題。

我需要的是圖像中顯示的“啟動”按鈕。 突出顯示的元素在圖像中以藍色顯示,並且xpath非常簡單:“ r'// * [@ id =” HME-8-widget_launch_button“]'”。

我嘗試了以下方法:

driver = webdriver.Firefox();
...
Launch = r'//*[@id="HME-8-widget_launch_button"]'
link = driver.find_element_by_xpath(Launch)
act.move_to_element(link)
act.click()
act.perform()

更簡單

link.click()

也不起作用。

我想念什么? 屏幕截圖 謝謝,

阿爾文

您存儲在Launch中的xPath似乎不正確。 首先,如果我正確理解了r'xpath'的用法,它就可以使反斜杠不會轉義字符。 我猜您已將act定義為ActionChains,在這種情況下,其余代碼應能正常工作,但我還是建議您

xpath = "//*[@id='HME-8-widget_launch_button']"
link = driver.find_element_by_xpath(xpath)
link.click()

如果您想重用該元素,或者如果您不需要重用它而只想單擊它,則只需

driver.find_element_by_xpath("//*[@id='HME-8-widget_launch_button']").click()

編輯添加:

等待..我假設您嘗試單擊圖像中突出顯示的元素正確嗎? 在圖片的第三行,還有另一個id='HME-8-widget_launch_button元素,該元素將首先被找到。 我不能肯定地說不看完整的HTML,但是您可以使用該按鈕的類來選擇元素。 請嘗試以下操作,並讓我知道它是否有效:

link = driver.find_element_by_css_selector("button.hm-button.k-button")

我無法測試,但這能識別您的元素嗎?

編輯以有望解決根本原因

哦,我想我知道您為什么不能單擊該按鈕。 查看您的屏幕截圖,您嘗試單擊的元素就在執行JavaScript之后。 如果您看一下該javascript,它將調用一個函數,該函數發出一個類似於以下內容的JQuery請求:

JQuery(yourElement).closest('.hm-widget').show()

此處此處的close closest()show()的JQuery文檔分別表明, closest('.hm-widget')將“從當前元素開始”並“向上”進入DOM樹,直到找到與所提供的匹配選擇器”。 從您的屏幕截圖中,我可以看到script標記上方的第三個div具有一類'hm-widget hc-button'並且我相信這就是.show()的目標,因此該div正在顯示,從而掩蓋了您的div並使它不可點擊。

請嘗試以下兩個建議:嘗試僅單擊該div並查看它是否單擊了按鈕。 我確定您可以弄清楚自己的錯誤,例如:

driver.find_element_by_css_selector('div.hm-widget.hc-button').click()

或使用您喜歡的任何選擇器。 我認為即使在<script>標記執行后,用戶也可以單擊此按鈕,這使我認為上述方法可行。

如果那行不通,我想知道如果您嘗試在driver.execute_javascript使用自己的jQuery與網站的jQuery對抗,會發生什么情況。 您可以做的一件事是嘗試使用jQuery的detach函數簡單地刪除我提到的有問題的javascript。 我認為可以通過以下方式實現:

css = "div.hm-widget-element > script"
scripts = driver.find_elements_by_css_selector(css)

這將從圖像中存儲(至少)兩個scripts的數組,因此scripts[0]將標識突出顯示的元素上方的腳本。 以下應該從DOM中刪除該標記,以便您可以(希望)單擊不受阻礙的按鈕。

driver.execute_script('Arguments[0].remove()', scripts[0])

如果這不起作用,最后一兩件事將嘗試刪除如下您的高亮元素的腳本。 我不完全確定那是做什么的,但似乎對您的目標元素有所幫助。

driver.execute_script('Arguments[0].remove', scripts[1])

如果您采用這種方法,那么我將在頁面加載之后以及在瀏覽器中執行任何操作之前添加javascript執行。

同樣,我無法測試它,所以讓我知道如何進行。

你可以這樣使用

launchXpath = "//button[@id='HME-8-widget_launch_button']"
launchBtn = driver.find_element_by_xpath(launchXpath )
launchBtn.click()

建議:您也可以使用id代替xpath

暫無
暫無

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

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