2017-10-20 169 views
1

我有一個按鈕,我試圖單擊並需要組中的一些幫助。該按鈕位於我的WordPress站點的後端/管理區域(我試圖將數據上傳到目錄列表系統中)。我在想,我需要使用按鈕類,因爲在同一頁上有兩個具有相同編號的data-id元素。我提供了我的硒代碼(python)嘗試以及我試圖訪問的html。任何幫助讚賞!無法使用id,xpath,class等單擊按鈕

HTML:

<div class="pkg-button"> 
    <a data-id="38579" class="btn btn-lg btn-primary button select-plan">Select</a> 
</div> 

下面是有衝突的ID的HTML代碼段。

<ul data-price="0" data-subscribed='0' data-id="38579" data-type="1" class="packagelistitems " > 

=============

代碼方法1:

elem = driver.find_element_by_id("38579").click() 

代碼方法2:

driver.find_element_by_class_name('btn btn-lg btn-primary button select-plan').click() 

代碼方法3:

elements = driver.find_elements_by_class_name("btn btn-lg btn-primary button select-plan") 
for e in elements: 
    e.click() 

代碼方法4:

driver.find_element_by_xpath('//*[@id="plan"]/div[1]/ul/li/div/div/div[2]/div[2]/a').click() 

對於這最後的代碼片段(#4),我發現了以下錯誤:

driver.find_element_by_xpath("//div[@class='pkg-button'] [a[text()='Select']]").click() 
在此

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <a data-id="38579" class="btn btn-lg btn-primary button select-plan">...</a> is not clickable at point (659, 14). Other element would receive the click: <div id="wpadminbar" class="">...</div> 
    (Session info: chrome=61.0.3163.100) 
    (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.15063 x86_64) 

回答

0

與嘗試你選擇元素的方式class="pkg-button"

+0

在你的代碼的點擊事件行,我發現了以下錯誤: selenium.common.exceptions.WebDriverException:消息:未知的錯誤:元素...是不是在點(627,14點擊)。其他元素將收到點擊:

...
(會話信息:鉻= 61.0.3163.100) (駕駛員信息:chromedriver = 2.33.506120(e3e53437346286c0bc2d2dc9aa4915ba81d9023f),平臺= Windows NT的10.0.15063 x86_64的) – user3280396

+0

@ user3280396我剛剛編輯答案 –

+1

壞主意點擊pkg-button沒有額外的規範,因爲它可能不是唯一的 –

2

目前尚不清楚爲什麼元素不是cli ckable(可能是您應該點擊div包裝,而不是a元素),那麼請嘗試以下的東西應該工作)

點擊div

//div[@class='pkg-button'][a[text()='Select']] 

點擊a標籤

//div[@class='pkg-button']/a[text()='Select'] 

//a[text()='Select'] 

重要提示:請注意,在method4中,您收到錯誤,其中編號爲wpadminbar的元素與您的項目重疊,因此請檢查第在瀏覽器的開發工具,以確保一些DIV是不是你想要點擊重疊元素=)

+0

我使用「find_element_by_xpath」,「.click()」使用了所有3個字符串。錯誤是: div字符串: selenium.common.exceptions.NoSuchElementException:消息:沒有這樣的元素:無法找到元素:{「method」:「xpath」,「selector」:「/ div [@ class ='pkg ')[] [a] [text()='Select']]「} a tag#1: selenium.common.exceptions.WebDriverException:消息:未知錯誤:元素...在點(627,14 )。其他元素將收到點擊:

...
user3280396

+0

標籤#2: selenium.common.exceptions.WebDriverException:消息:未知錯誤:元素...在點(627,14)處不可點擊。其他元素將收到點擊:

...
user3280396

0

find_element_by_id正在尋找獨特id屬性,而不是自定義命名的屬性一樣data-id

試試這個:

driver.find_element_by_xpath( 「//一個[@數據-ID = '38579']」)。點擊()

+0

獲取以下內容:selenium.common.exceptions.WebDriverException:消息:未知錯誤:元素...在點(627,14)處無法單擊。其他元素將收到點擊:

...
user3280396

+0

引用此:https://stackoverflow.com/questions/11908249/debugging-element-is-not-clickable-at-point-error – Borna

0

你可以嘗試

LINKTEXT直接因爲它的一個使用文本鏈接

find_element_by_link_text("Select")

的CSS

div.pkg-button>a[data-id='38579']

div[class='pkg-button']>a[data-id='38579']

或最後XPATH

.//div[@class='pkg-button']/a[text()='Select']

當你嘗試不工作,因爲,

  1. elem = driver.find_element_by_id("38579").click()這不起作用,因爲沒有元素具有 「id」 屬性匹配在下面,「data-id」不同於「id」

  2. driver.find_element_by_class_name('btn btn-lg btn-primary button select-plan').click()這個sel ector是廣泛的。可能有很多可用的元素,它可以點擊東西,你可能不希望

  3. elements = driver.find_elements_by_class_name("btn btn-lg btn-primary button select-plan") for e in elements: e.click()與上面的#2,事情就可以隨機失敗之前,可以點擊你希望

  4. 的元素

    driver.find_element_by_xpath('//*[@id="plan"]/div[1]/ul/li/div/div/div[2]/div[2]/a').click() 這只是脆弱的選擇,我不指望它的工作方式。你也不可以用這樣的選擇器來編寫硒腳本,你的自動化將失敗,左,右和中心。

0

你可能想看看使用find_element_by_css_selector。 對於上述,使用您的瀏覽器,在感興趣的HTML代碼部分,點擊「複製」,然後「複製選擇器」。

How to css selector.

+0

我能夠解決問題的代碼如下。我的問題是我正在與頁面底部的一個對象進行交互,但是我嘗試點擊的按鈕在頁面中間。似乎我想與之交互的對象在腳本交互時必須在物理上可見。這是真的?我會認爲所有的對象都被加載到內存中,並可以隨機訪問。有人請評論這一點。 driver.find_element_by_xpath('// * [@ id =「plan」]/div [1]/ul/li/div/div/div [2]/div [2]/a')。click() – user3280396

+0

是。在硒中元素必須是可見的和難處理的,否則你將無法完成該操作。這更像是模擬用戶操作。 –