python版本:3.8
pip install BeautifulSoup4
pip install selenium
pip install requests

from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom bs4 import BeautifulSoupimport time import requests#抉择浏览器驱动(还能够抉择webdriver.Firefox;webdriver.Ie;相干浏览器的驱动须要自行下载)driver = webdriver.Chrome(executable_path="F:\code\简书\chromedriver")driver.get("http://www.baidu.com")#下一行是用assert的形式确认题目是否蕴含“Python”一词assert "百度" in driver.title#如果某些元素不是立刻可用的,隐式期待是通知WebDriver去期待肯定的工夫后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式期待是设置该WebDriver的实例的生命周期。driver.implicitly_wait(5) # seconds#在浏览器搜寻栏插入pythondriver.find_element_by_id('kw').send_keys('python')# 模仿回车操作 ,开始搜寻driver.find_element_by_id('su').send_keys(Keys.ENTER)driver.implicitly_wait(3) # seconds#此处如果不sleep,上面获取到的数据可能为空 (https://blog.csdn.net/manmanxiaowugun/article/details/89646135)time.sleep(3)# 应用BeautifulSoup解析搜寻后果#bsobj = BeautifulSoup(driver.page_source, features="html.parser")# 获取搜寻后果队列#search_results = bsobj.find_all('div', {'class': 'result c-container'})"""此处应用的是find_elements_by_css_selector,依据其右键“下一页”的查看获取到其js path并进行批改:document.querySelector("#page > div > a:nth-child(12)")pop() 函数用于获取列表中的一个元素(默认为最初一个元素),并且返回该元素 的值。pop()或 pop(-1)默认获取一组元素中的最初一个driver.find_elements_by_css_selector("#page > div > *").pop().click()driver.find_element_by_css_selector("#page > div > a.[nth-last-child(1)]")不知为何不失效???????????"""def get_real_url(url):   try:      #如果不设置timeout,会导致上面出后果较慢,超时后间接返回百度的链接(example:http://www.baidu.com/link?url=TMx1usYKo-ncZAXpBq4rjaJ535T9G78lQyuxANxqHAQ9Ckwt7JVh4s89C1yEJ6a7vsGuef6Qa2dWMuXinJnpBa)      real_url=requests.get(url, timeout=1).url       return real_url   except:      return url#取前两页的题目和链接地址for i in range(2):   driver.implicitly_wait(3) # seconds   bsobj = BeautifulSoup(driver.page_source, features="html.parser")   search_results = bsobj.find_all('div', {'class': 'result c-container'})   for iteam in search_results:      print (iteam.h3.a.get_text(strip=True) + " " + get_real_url(iteam.h3.a.get('href')))   #刷新以后页面要不然获取下一页元素是会报错(" stale element reference: element is not attached to the page document" 古老元素援用:元素没有附加到页面文档中)   print ('\n')   driver.refresh()   driver.find_elements_by_css_selector("#page > div > *").pop().click()"""当你向通过CSS选择器查找元素时应用这个。 在该策略下,页面中第一个匹配该CSS 选择器的元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异样。作为示例,页面元素如下所示:<html> <body>  <p class="content">Site content goes here.</p></body><html>"""#driver.find_element_by_css_selector('div.result')"""#test用time.sleep(5)#实例化函数elem = driver.find_element_by_id('kw')#清空搜索项elem.clear()#插入搜寻我的项目elem.send_keys("pycon")#回车elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_source"""driver.close()

最终输入后果:

对于页面元素的获取:

  1. 在所须要地位右键点击查看
  2. 主动跳转到你须要的元素信息地位,能够通过挪动鼠标到其余元素信息上看到对应页面的内容
  3. 获取元素地位

依据不同的品种能够应用Selenium不同的办法