[英]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.