from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.znlzd.com/bqg/20997/")
# html=driver.page_source
a = driver.find_elements_by_xpath('/html/body/div[3]/div[2]/div/div[3]/span[2]/select//option')
for i in a:
print(i)
driver.close()
<selenium.webdriver.remote.webelement.WebElement (session="b709b4ffe71161ec4fa5f4b33573d689", element="039639af-36ce-449e-af3b-027f9b25ea16")>
<option value="/bqg/20997/index_2.html">第21章 - 40章</option>
原因
代码没错,输出的时候需要根据你的需求改一下输出
解决方法
Selenium WebDriverWait 获取元素文本需要使用 element.get_attribute('attributeName') 方式获取,以下是获取文本的属性名:
innerHTML:会返回元素的内部 HTML, 包含所有的HTML标签。
outerHTML: 获取整个元素对应的HTML文本内容
textContent:获取 HTML 文本,需要注意的是 textContent 是 W3C 兼容的文字内容属性,不支持 IE 浏览器。
innerText:获取 HTML 文本,与 textContent 不同的是 innerText 不是 W3C DOM 的指定内容,不支持 FireFox 浏览器。
value:获取带有 value 属性的值。
根据自己的需求进行选择输出
代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
# driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.znlzd.com/bqg/20997/")
# html=driver.page_source
a = driver.find_elements_by_xpath('/html/body/div[3]/div[2]/div/div[3]/span[2]/select//option')
for i in a:
print(i.get_attribute('innerHTML'))
print(i.get_attribute('outerHTML'))
print(i.get_attribute('innerText'))
print(i.get_attribute('value'))
print(i.text)
break # 这个实际需要删除,这里是测试只获取一个
driver.close()
输出为:
第1章 - 20章
<option value="/bqg/20997/index_1.html" selected="selected">第1章 - 20章</option>
第1章 - 20章
/bqg/20997/index_1.html
第1章 - 20章
看下上面的输出哪个符合你的需求,
按照你题目中的要求的话,想要<option value="/bqg/20997/index_2.html">第21章 - 40章</option>
的话,
就使用
print(i.get_attribute('outerHTML'))
————————————————
如有问题及时沟通
那个不是乱码,只是你输出的是对象,改成这样就好了。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.znlzd.com/bqg/20997/")
# html=driver.page_source
a = driver.find_elements_by_xpath('/html/body/div[3]/div[2]/div/div[3]/span[2]/select//option')
for i in a:
print(i.text)
driver.close()