[数据采集笔记06]——02selenium库的学习——selenium使用的简单介绍

selenium使用的简单介绍

1.基本步骤

seleninum的使用一般分为以下几个步骤(个人总结):

  • ①创建一个浏览器对象

  • ②加载某个页面

  • ③获取元素[可以通过id、name、xpath、连接的文本、标签的名、class、css选择器等方式获取元素]

  • ④关闭浏览器

我们以爬取贝壳网新房第一页的楼盘名为例子:

from selenium import webdriver
#这个需要改成自己的自己的驱动位置
driverpath = 'D:\Taosoftware\chromedriver_win32\chromedriver.exe'

#①传入驱动位置, 实例化一个浏览器对象
driver = webdriver.Chrome(executable_path=driverpath)
#②加载贝壳的页面
driver.get("https://qd.fang.ke.com/loupan")
#③获取所有name元素
names= driver.find_elements_by_css_selector(".name")
for name in names:
    #打印出楼盘的名
    print(name.text)
#④关闭浏览器
driver.quit()


2.获取元素

查找元素可以通过: id、name、xpath、连接的文本、标签的名、class、css选择器等方式获取元素。

此外,提供了两类方法:一类是获取第一个符合条件的元素,另一类是获取符合条件的所有元素。

2.1. Selenium提供了下列的方法给你查找元素:

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

一次查找多个元素 (这些方法会返回一个list列表):

  • find_elements_by_name
  • 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_elements_by_css_selector

具体可以查看:https://selenium-python-zh.readthedocs.io/en/latest/waits.html这是非官方文档




3.等待

本部分取自selenium文档非官方https://selenium-python-zh.readthedocs.io/en/latest/waits.html


现在的大多数的Web应用程序是使用Ajax技术。当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits, 我们可以解决这个问题。waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作。

Selenium Webdriver 提供两种类型的waits - 隐式和显式。 显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。 而隐式等待让Webdriver等待一定的时间后再才是查找某元素。

3.1.显式等待

显式的waits等待一个确定的条件触发然后才进行更深一步的执行。最糟糕的的做法是time.sleep(),这指定的条件是等待一个指定的时间段。 这里提供一些便利的方法让你编写的代码只等待需要的时间,WebDriverWait结合ExpectedCondition是一种实现的方法:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delay_loading")
try:
    element = WebDriverWait(driver,10).until(
        EC.presence_of_element_located((By.ID,"myDynamicElement"))
    )
finally:
    driver.quit()

这段代码会等待10秒,如果10秒内找到元素则立即返回,否则会抛出TimeoutException异常,WebDriverWait默认每500毫秒调用一下ExpectedCondition直到它返回成功为止。ExpectedCondition类型是布尔的,成功的返回值就是true,其他类型的ExpectedCondition成功的返回值就是 not null

就是在规定的时间以内如果满足条件, 就往下继续运行。 否则就抛出异常

3.2.隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

意思就是说:一旦设置,每次查询元素都会按照新设置的值进行等待

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

吕云翔的python网络爬虫实战中说:显式等待相比隐士等待更灵活点。

至于为什么这个么说, 我感觉就是因为隐式等待,,隐式等待是设置该WebDriver的实例的生命周期。

4. 执行JS

对于有些操作需要执行JS脚本来完成, 如往下滑动页面等, selenium提供了执行js的方法

  • execute_script()
  • execute_async_script()

实战项目

  • 爬取简述首页文章信息(带有ajax技术)

参考

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值