我對 Python 上的 xpath 有一個相對復雜的問題。這是我的 HTML 布局:
<label name=A>
<span name=B>
"Your Salary"
<div name=C>
<div name=D>
<input name=E>
<label name=A>
<span name=B>
"Years of Experience"
<div name=C>
<div name=D>
<input name=E>
由于 DOM,我只能估計輸入 E 的名稱。但是,可能有多個輸入 E 需要不同的條目。我的嘗試是在跨度 B 處找到輸入的標題,并將不同的回應輸入基于該標題,如下所示:
form_number = driver.find_elements_by_xpath('//input[contains(@name, "E")]')
for link in form_number:
if driver.find_elements_by_xpath('//input[contains(@name, "E")]/parent::div/parent::div/preceding-sibling::label/span[1][text()[contains(., "Salary")]]'):
link.send_keys("55000")
else: link.send_keys("2")
這里的想法是如果問題與“薪水”有關,則輸入“55000”。對于任何其他問題,我會選擇“2”,在這種情況下是“2 年的經驗”。這似乎適用于第一個條目,但是它將密鑰(在本例中為 55000)應用于所有輸入,而不僅僅是第一個。似乎 Python 并沒有回圈遍歷每個元素的“if - else”回圈,而是采用第一個條件并將其粘貼到串列的每個元素中。這是迄今為止我得到的最接近的。
非常感謝大家幫助我,因為我在這個 API 上大吃一驚!
(編輯)所以在玩了更多之后......似乎這可能是API本身的問題。即使我為每個輸入提交默認值“2”,然后運行該函式,它仍會將兩個輸入替換為 55000。可能必須通過手動迭代串列編號來解決此問題?
uj5u.com熱心網友回復:
您可以采取另一種方法來解決問題。
首先,您確定parent tags哪個是標簽,然后使用try..except塊檢查元素是否存在,然后設定inputbox值,否則轉到除塊并設定其他inputbox值。
#Fisrt identify the labels tag
parentTags=driver.find_elements_by_xpath('//label[@name="A"]')
#Iterate the loop
for ptag in parentTags:
try:
#identify the tag text of the label, if found then set the input value as 55000
ptag.find_element_by_xpath('.//span[conains(.,"Salary")]')
ptag.find_element_by_xpath('.//following-sibling::div[1]//input').send_keys("55000")
except:
#Not found then set the input value as 2
ptag.find_element_by_xpath('.//following-sibling::div[1]//input').send_keys("2")
uj5u.com熱心網友回復:
您的if driver.find_elements_by_xpath ...陳述不依賴于link; link您將為回圈中的每個值評估一次完全相同的 xpath 。據推測,您的陳述句中應該有類似link.find_elements_by_xpath(而不是driver.find_elements_by_xpath)的內容if,以便每次使用不同的背景關系節點多次評估 xpath 運算式(不同的input元素將顯示為link變數的順序值)。
form_number = driver.find_elements_by_xpath('//input[contains(@name, "E")]')
for link in form_number:
if link.find_elements_by_xpath('parent::div/parent::div/preceding-sibling::label/span[1][text()[contains(., "salary")]]'):
link.send_keys("55000")
else: link.send_keys("2")
其次,我想知道該contains功能的使用。此函式測驗特定字串是否在其中的任何位置包含另一個字串。例如contains('abc', 'b')回傳真。您可能只想使用 xpath=運算子來查看字串值是否相等。
另請注意,contains函式和=運算子都區分大小寫,即contains("Your Salary", "salary")等于 false。
form_number = driver.find_elements_by_xpath('//input[@name = "E"]')
for link in form_number:
if link.find_elements_by_xpath('parent::div/parent::div/preceding-sibling::label/span[1][text()[contains(., "Salary")]]'):
link.send_keys("55000")
else: link.send_keys("2")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497452.html
上一篇:PythonBeautifulSoup和Selenium沒有抓取完整的html
下一篇:Backtrace:Ordinal0[0x00FE6463 2188387]instacktraceerror是什么意思,同時使用Selenium和ChromeDriver
