selenium的使用教程1

会有一股神秘感。 提交于 2019-12-22 09:35:08

Selenium 库里有个叫 WebDriver 的 API,WebDriver 可以加载网站的浏览器,但是也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。

1.加载网页

selenium通过控制浏览器,所以对应的获取的数据都是elements中的内容。

from selenium import webdriver 

# 指定driver的绝对路径,也就是制定驱动程序的位置
# driver = webdriver.PhantomJS(executable_path='/home/worker/Desktop/driver/phantomjs') 
driver = webdriver.Chrome(executable_path='/home/worker/Desktop/driver/chromedriver')

# 向url发起请求
driver.get("http://www.itcast.cn/")

# 把网页保存为图片
driver.save_screenshot("itcast.png")

# 退出模拟浏览器,一定要退出!不退出会有残留进程!
driver.quit() 

2.定位和操作:

以百度搜索为例:

import time
from selenium import webdriver

driver = webdriver.Chrome(executable_path='/home/worker/Desktop/driver/chromedriver')
driver.get("https://www.baidu.com/")

driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()

time.sleep(6)
driver.quit()

3.查看请求信息:

driver.page_source    # 查看网页源码
driver.get_cookies()  # 获取当前浏览器的全部cookies
driver.current_url    # 获取当前页面的url

4.退出

driver.close() #退出当前页面
driver.quit()  #退出浏览器

5.selenium的定位操作

定位元素语法:

find_element_by_id (返回一个元素)
find_elements_by_xpath (返回一个包含元素的列表)
find_elements_by_link_text (根据连接文本获取元素列表)
find_elements_by_partial_link_text (根据链接包含的文本获取元素列表)
find_elements_by_tag_name (根据标签名获取元素列表)
find_elements_by_class_name (根据类名获取元素列表)

注意:
find_element和find_elements的区别:
多了个s就返回列表,没有s就返回匹配到的第一个 。

by_link_text和by_partial_link_tex的区别:
全部文本和包含某个文本。

举例:

以豆瓣首页为例: https://www.douban.com/

  from selenium import webdriver
  
  driver = webdriver.Chrome()
  driver.get("https://www.douban.com/")

  ret1 = driver.find_element_by_id("anony-nav")
  print(ret1)
  # 输出为:<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")>

  ret2 = driver.find_elements_by_id("anony-nav")
  print(ret2)
  #输出为:[<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")>]

  ret3 = driver.find_elements_by_xpath("//*[@id='anony-nav']/h1/a")
  print(len(ret3))
   #输出为:1

  ret4 = driver.find_elements_by_tag_name("h1")
  print(len(ret4))
   #输出为:1

  ret5 = driver.find_elements_by_link_text("下载豆瓣 App")
  print(len(ret5))
   #输出为:1

  ret6 = driver.find_elements_by_partial_link_text("豆瓣")
  print(len(ret6))
   #输出为:24

  driver.close()

获取数据语法:

find_element仅仅能够获取元素,还能直接获取其中的数据。如果需要获取数据需要使用以下方法:

  • 获取文本:element.text
  • 获取属性值:element.get_attribute(“href”)

使用示例:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.douban.com/")

ret7 = driver.find_elements_by_tag_name("h1")
print(ret7[0].text)
#输出:豆瓣

ret8 = driver.find_elements_by_link_text("下载豆瓣 App")
print(ret8[0].get_attribute("href"))
#输出:https://www.douban.com/doubanapp/app?channel=nimingye

driver.close()

总结:

  1. 根据xpath定位元素:driver.find_elements_by_xpath("//*[@id=‘s’]/h1/a")
  2. 根据class定位元素:driver.find_elements_by_class_name(“box”)
  3. 根据link_text定位元素:driver.find_elements_by_link_text(“下载豆瓣 App”)
  4. 根据tag_name定位元素:driver.find_elements_by_tag_name(“h1”)
  5. 获取文本内容:element.text 获取标签属性: element.get_attribute(“href”)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!