#出现element错误
import time
import parsel
import requests
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get('https://www.amazon.de/')
word = input('请输入你需要的关键词:')
driver.find_element(by=By.NAME, value="field-keywords").send_keys(word)
sleep(5)
driver.find_element(By.XPATH, "//input[@type='submit']").click() # 利用相对路径+属性值
driver.find_element(By.ID, "nav-search-submit-button").click()
url = 'https://www.amazon.de/s?k={}'.format(word)
headers = {
'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0',
'Referer': 'https://www.amazon.de/'
}
res = requests.get(url=url, headers=headers)
html_data = res.text
for links in driver.find_elements(By.XPATH,
'//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]'):
time.sleep(1)
print(links.get_attribute('href'))
a = []
for links in driver.find_elements(By.XPATH,
'//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]'):
time.sleep(1)
print(links.get_attribute('href'))
a.append(links.get_attribute('href'))
driver.find_element(By.XPATH, '//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]').click()
driver.find_element(By.ID, "sellerProfileTriggerId").click()
box = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div/div/div/div[9]/div/div/div").text
print(box)
driver.back()
driver.back()
alist = driver.find_elements(By.XPATH,
'//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]')
for i in adriver.find_element(By.XPATH, '//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]').click():
print(i)
#报错为The element with the reference b4185c11-2ee6-45f4-91ce-ad7d9532d6e6 is stale; either its node document is not the active document, or it is no longer connected to the DOM
该怎么解决这个问题
#初步解决方刷新element,但是没效果
你要用函数find_elements() 拿到所有匹配数据,修改:
for link in driver.find_elements(By.XPATH, '//*[@class="a-link-normal s-underline-text s-underline-link-text s-link-style '
'a-text-normal"]'):
link.click()
driver.find_element(By.ID, "sellerProfileTriggerId").click()
box = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div/div/div/div/div[9]/div/div/div").text
print(box)
driver.back()
driver.back()
Element
类是XML处理的核心类,可以直观地理解为XML的节点,大部分XML节点的处理都是围绕着Element类进行的.要想创建一个节点对象,则可以通过构造函数直接创建
# root表示节点的名称
root=etree.Element("root")
关于Element
类的相关操作,主要可分为三部分,分别是节点操作,节点属性的操作和节点内文本的操作
# 节点操作:获取节点名称,使用tag属性
print(root.tag)
root
# 节点属性的操作:属性以ker-value形式存储
root=etree.Element("root",interesting="totally")
print(etree.tostring(root))
b'<root interesting="totally"/>'
# 通过set()方法添加属性
root.set("age","30")
print(etree.tostring(root))
b'<root interesting="totally" age="30"/>'
# 节点内文本操作:text,tail或者xpath()方法
root.text="hello wold"
print(root.text)
print(etree.tostring(root))
hello wold
b'<root interesting="totally" age="30">hello wold</root>'