browser.find_elements_by_xpath('/html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]/span[1]/span[2]') AttributeError: 'WebDriver' object has no attribute 'find_elements_by_xpath'
时间: 2023-06-17 09:03:29 浏览: 153
这个错误是因为你使用的是 `WebDriver` 对象,而不是 `WebElement` 对象。`WebDriver` 对象没有 `find_elements_by_xpath` 方法,只有 `WebElement` 对象才有。
你需要先使用 `WebDriver` 对象找到需要操作的元素,然后再使用 `find_elements_by_xpath` 方法查找子元素,例如:
```python
element = driver.find_element_by_xpath('/html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]')
sub_elements = element.find_elements_by_xpath('.//span[1]/span[2]')
```
这样就可以使用 `find_elements_by_xpath` 方法找到子元素了。注意在 XPath 表达式中使用 `.` 来表示当前元素。
相关问题
def get_teleplay_links(nums=1000): with open('all_links.csv', 'r')as opener: link_list = opener.readlines() print(link_list) link_list = set(link.strip() for link in link_list) # print(link_list) browser.get(url) links = browser.find_elements_by_xpath("html//div[@class='list-wp']//a[@target='_blank']") browser.execute_script("window.scrollTo(0, document.body.scrollHeight)") time.sleep(1) try: while len(links) < nums: print('nums:', len(links)) browser.execute_script("window.scrollTo(0, document.body.scrollHeight)") time.sleep(random.randint(3, 5)) more = browser.find_element_by_xpath("html//a[@class='more']") while len(browser.window_handles) > 1: browser.switch_to.window(browser.window_handles[1]) browser.close() browser.switch_to.window(browser.window_handles[0]) print(more.get_attribute('href')) more.click() links = browser.find_elements_by_xpath("html//div[@class='list-wp']//a[@target='_blank']") for link in links: href = link.get_attribute('href') print('href', href) if href not in link_list: link_list.add(href) else: print('exist!') except Exception: with open('all_links.csv', 'w')as opener: for href in link_list: opener.write(href + '\n')
这段代码的作用是获取电视剧链接,并将新的链接存储到一个名为 "all_links.csv" 的文件中。具体流程如下:
1. 打开名为 "all_links.csv" 的文件,读取其中的链接列表,存储到 link_list 变量中。
2. 将 link_list 中的每个链接去掉首尾空格,存储到 set 中,这样可以去重。
3. 打开一个网页,通过 xpath 定位到网页中的电视剧链接,存储到 links 变量中。
4. 将网页滚动到底部,等待 1 秒,尝试查找 "更多" 按钮。
5. 如果找到 "更多" 按钮,就点击它,等待新的电视剧链接加载完成。
6. 将新的电视剧链接存储到 link_list 中,如果链接已经存在于 link_list 中,则忽略。
7. 如果出现异常,就将 link_list 中的链接写入到 "all_links.csv" 文件中。
需要注意的是,这段代码中使用了 Selenium 库来模拟浏览器操作,因此需要先安装该库。另外,代码中的 url 变量没有给出,需要在调用该函数之前先定义好。
帮我调试一下url = 'https://item.jd.com/100008348542.html' # 商品详情页链接 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} from selenium import webdriver # 设置浏览器选项 options = webdriver.ChromeOptions() options.add_argument('headers') # options.add_argument('--no-sandbox') # options.add_argument('--disable-dev-shm-usage') # 打开浏览器并访问页面 browser = webdriver.Chrome(options=options) browser.get(url) # /html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]/span[1]/span[2] # 定位价格标签并获取价格 price_element = browser.find_elements_by_xpath('/html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]/span[1]/span[2]') price = price_element.text print(price)
您的代码有一些问题,可以尝试以下修改:
1. 将 `options.add_argument('headers')` 修改为 `options.add_argument(headers)`,这样就可以将请求头信息传递给浏览器。
2. 将 `find_elements_by_xpath` 修改为 `find_element_by_xpath`,因为您只需要获取一个元素的文本,而不是多个。
修改后的代码如下:
```python
url = 'https://item.jd.com/100008348542.html' # 商品详情页链接
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
from selenium import webdriver
# 设置浏览器选项
options = webdriver.ChromeOptions()
options.add_argument(headers)
# 打开浏览器并访问页面
browser = webdriver.Chrome(options=options)
browser.get(url)
# 定位价格标签并获取价格
price_element = browser.find_element_by_xpath('/html/body/div[6]/div/div[2]/div[4]/div/div[1]/div[2]/span[1]/span[2]')
price = price_element.text
print(price)
```
希望能帮到您!
阅读全文