outlines = file.find_elements(By.CSS_SELECTOR, "span.badge-info">十四五<)
时间: 2024-04-14 15:28:39 浏览: 147
在你提供的代码中,你想要使用Selenium的`find_elements()`方法通过CSS选择器来查找所有含有"十四五"的元素。
然而,你的代码存在一些语法错误。正确的语法应该是:
```python
outlines = file.find_elements(By.CSS_SELECTOR, "span.badge-info:contains('十四五')")
```
在这个代码中,我们使用了CSS选择器`span.badge-info:contains('十四五')`来查找所有带有"class"为"badge-info"且文本内容包含"十四五"的`<span>`元素。
请注意,Selenium的`find_elements()`方法返回的是一个元素列表,你需要遍历这个列表来访问每个元素。另外,确保已经正确导入了Selenium的相关模块,并且已经启动了WebDriver来访问网页。
如果你想获取每个元素的文本内容,可以使用`.text`属性:
```python
for outline in outlines:
print(outline.text)
```
这个示例代码将打印出所有满足条件的元素的文本内容。
注意:为了使用`find_elements()`方法,你需要导入Selenium的`By`类:
```python
from selenium.webdriver.common.by import By
```
希望这可以帮助你解决问题。如果还有其他疑问,请随时提问。
相关问题
InvalidSelectorException Traceback (most recent call last) Cell In[32], line 3 1 #运行函数进行爬取,爬完的就在files_dir = "/Users/hh/Desktop/python/……"找 ----> 3 auto_pagination() Cell In[31], line 8, in auto_pagination() 5 time.sleep(2) 7 # 保存当前页的文件 ----> 8 savefiles() 10 # 查找下一页按钮 11 nextbutton = driver.find_element(By.CSS_SELECTOR, "ul.pagination li.active + li button") Cell In[28], line 23, in savefiles() 18 url = a.get_attribute("href") 20 # 只保存"十四五"相关文件 21 # 使用CSS选择器查找所有包含"十四五"文本的span元素 ---> 23 outlines = file.find_elements(By.CSS_SELECTOR, "span.badge-info:contains('十四五')") 25 if len(outlines) > 0: 26 # 获取规划文件后面可能存在的PDF徽标 27 pdfs = file.find_elements(By.CSS_SELECTOR, "span.badge-light")
根据错误信息,看起来是在使用Selenium的`find_elements()`方法时出现了`InvalidSelectorException`异常。这个异常通常表示选择器无效。
出现这个异常的原因可能有以下几个:
1. 选择器的语法可能不正确。请确保你使用的选择器是有效的CSS选择器。可以在浏览器的开发者工具中使用选择器进行测试和验证。
2. 选择器可能无法准确匹配到元素。请确保你使用的选择器能够准确地匹配到你想要查找的元素。可以在浏览器的开发者工具中检查网页结构,确认选择器是否正确。
3. 可能需要使用其他定位方法。如果CSS选择器无法准确地定位到元素,你可以尝试使用其他定位方法,例如XPath或者其他属性来定位元素。
根据错误信息提供的堆栈跟踪,你可以找到引发异常的代码所在的位置。请确保你正在正确地使用Selenium的定位方法,并且选择器是有效的。
如果你能够提供引发异常的代码和网页结构的相关信息,我可以更具体地帮助你解决问题。
files_dir = "/Users/hh/Desktop/python/fileshunan" def savefiles(): # 当前页码 pageno = driver.find_element(By.CSS_SELECTOR, "ul.pagination li.active button").text print("page", pageno) # 获取规划文件列表 filelist = driver.find_elements(By.CSS_SELECTOR, "div.card-body ul li") # 循环规划文件 for file in filelist: # 获取规划文件链接标签 a = file.find_element(By.TAG_NAME, "a") # 规划文件名称 filename = a.text # 规划文件地址 url = a.get_attribute("href") # 只保存纲要文件 outlines = file.find_elements(By.CSS_SELECTOR, "span.badge-warning") if len(outlines) > 0: # 获取规划文件后面可能存在的PDF徽标 pdfs = file.find_elements(By.CSS_SELECTOR, "span.badge-light") if len(pdfs) > 0: # 如果存在PDF徽标,则为PDF格式文件 url = url.replace("plan", "planpdf") print(filename, url) r = requests.get(url) with open(files_dir + filename + ".pdf", 'wb') as f: f.write(r.content) else: # 如果不存在PDF徽标,则为HTML格式文件 print(filename, url) r = requests.get(url) soup = BeautifulSoup(r.text, 'lxml') with open(files_dir + filename + ".html", 'wt', encoding="utf-8") as f: f.write(soup.select_one("#plancontent").prettify())
根据你提供的代码,你似乎想要下载规划文件并保存到指定的文件夹中。我注意到你使用了 Selenium 和 BeautifulSoup 库来解析网页内容。
首先,确保你已经导入了需要的库,如下所示:
```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import requests
```
然后,在 `savefiles()` 函数中,你可以使用以下代码来保存规划文件:
```python
def savefiles():
# 当前页码
pageno = driver.find_element(By.CSS_SELECTOR, "ul.pagination li.active button").text
print("page", pageno)
# 获取规划文件列表
filelist = driver.find_elements(By.CSS_SELECTOR, "div.card-body ul li")
# 循环规划文件
for file in filelist:
# 获取规划文件链接标签
a = file.find_element(By.TAG_NAME, "a")
# 规划文件名称
filename = a.text
# 规划文件地址
url = a.get_attribute("href")
# 只保存纲要文件
outlines = file.find_elements(By.CSS_SELECTOR, "span.badge-warning")
if len(outlines) > 0:
# 获取规划文件后面可能存在的PDF徽标
pdfs = file.find_elements(By.CSS_SELECTOR, "span.badge-light")
if len(pdfs) > 0:
# 如果存在PDF徽标,则为PDF格式文件
url = url.replace("plan", "planpdf")
print(filename, url)
r = requests.get(url)
with open(files_dir + filename + ".pdf", 'wb') as f:
f.write(r.content)
else:
# 如果不存在PDF徽标,则为HTML格式文件
print(filename, url)
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
with open(files_dir + filename + ".html", 'wt', encoding="utf-8") as f:
f.write(soup.select_one("#plancontent").prettify())
```
在上述代码中,我们首先获取当前页码,并打印出来。然后,通过 `driver.find_elements()` 方法获取规划文件列表。
接下来,我们循环遍历每个规划文件,并获取文件的链接标签、文件名称和文件地址。
我们使用 `file.find_elements()` 方法检查是否有纲要文件的标记。如果有,我们进一步检查是否存在 PDF 徽标,以确定文件的格式。如果存在 PDF 徽标,我们将构建相应的 URL,并使用 `requests.get()` 方法下载该文件,并将内容保存到指定的文件夹中。
如果不存在 PDF 徽标,则说明文件为 HTML 格式。我们使用 `requests.get()` 方法下载该文件,并使用 BeautifulSoup 解析 HTML 内容。然后,我们将解析后的内容写入到指定的 HTML 文件中。
请确保你已经设置好了 `files_dir` 变量,它指定了保存文件的目录路径。
请注意,以上代码仅供参考,并需要根据你的实际页面结构和需求进行适当的修改。另外,记得导入所需的库。
如果你有任何进一步的问题,请随时提问。
阅读全文