我有一個代碼片段,我去url,按 div 元素塊抓取資料。data-asin我很容易通過不同的數字找到 div 塊。并且內部回圈locator相應地改變。然后奇怪的是,x_block_of_index=driver.find_element(By.XPATH,locator)效果很好,我的意思是根據新的資料-asin 號找到合適的塊,但之后,y_title=x_block_of_index.find_element(By.XPATH,'//div/h2/a/span')只找到第一個 div 塊文本值。不根據回圈改變。我嘗試了很多方法來了解原因,正如您將看到的,我試圖獲取 span 元素的屬性,因為它是 HTML 元素的 DOM 屬性
wait=WebDriverWait(driver,timeout=77)
try:
x_indexes=wait.until(EC.visibility_of_all_elements_located((By.XPATH,'//div[@data-asin]')))
print(len(x_indexes),'X_INDEX')
counter=1
for i in range(len(x_indexes)):
x_data_asin=x_indexes[i].get_attribute('data-asin')
if x_data_asin!="":
print(x_data_asin,i,counter)
counter =1
#locating title
locator='//div[@data-asin="' x_data_asin '"]'
x_block_of_index=driver.find_element(By.XPATH,locator)
x_title=x_indexes[i].find_element(By.XPATH,'//div/h2/a/span')
#print(x_block_of_index.text)
y_title=x_block_of_index.find_element(By.XPATH,'//div/h2/a/span')
print(y_title.text)
print(y_title.get_attribute('textContent'))
except:
y_indexes=driver.find_elements(By.XPATH,'//div[@data-asin]')
print(len(y_indexes))
uj5u.com熱心網友回復:
您可能需要.在 XPath 的開頭添加一個點以使其相對。
我的意思是,而不是x_title=x_indexes[i].find_element(By.XPATH,'//div/h2/a/span')可能它應該是x_title=x_indexes[i].find_element(By.XPATH,'.//div/h2/a/span')
相同的y_title=x_block_of_index.find_element(By.XPATH,'//div/h2/a/span')-> 將其更改為y_title=x_block_of_index.find_element(By.XPATH,'.//div/h2/a/span').
當您應用 XPath 定位器時,驅動程式將從 DOM 上層元素開始搜索,并回傳第一個匹配項。但是,當您.在 XPath 運算式之前放置一個點并將其應用于某個特定元素(節點)時,它將開始搜索該特定元素(節點)的形式(內部)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525870.html
下一篇:從bs4獲取跨度文本
