用Selenium爬虫

下载:pip install selenium

什么是selenium?

        selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

        selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

浏览器驱动下载

        chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver;

        chrome: http://chromedriver.storage.googleapis.com/index.html

        Firefox:Releases · mozilla/geckodriver · GitHub

        IE:http://selenium-release.storage.googleapis.com/index.html

        Edge: Microsoft Edge WebDriver - Microsoft Edge Developer

根据自行浏览器版本对应下载最接近的chromedriver版本。

检验是否安装成功:

终端输入(cmd):chromedriver 

使用方法

from selenium import webdriver

#指定浏览器
driver = webdriver.Chrome()

#打开指定窗口
driver.get('https://www.baidu.com/')

#获取网页源代码
print(driver.page_source)

获取第二窗口源码

from selenium import webdriver

#指定浏览器
driver = webdriver.Chrome()

#打开指定窗口
driver.get('https://www.baidu.com/')

#打开第二窗口
driver.execute_script("window.open('https://www.taobao.com/')")

#切换窗口(切换为第二窗口)
driver.switch_to.window(driver.window_handles[1])
#如果获取第三个窗口也是window_handles[1]

#获取网页源代码
print(driver.page_source)

#关闭当前窗口
driver.close()
#退出浏览器driver.quit()

元素定位find_element

定位到输入框位置,使用.send_keys("python")填充元素 

通过By方法定位

from selenium import webdriver
from selenium.webdriver.common.by import By #定位元素必要模块
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

#定位网页元素

#通过id获取 
driver.find_element(By.ID,"kw")

#通过类名class获取
# driver.find_element(By.CLASS_NAME,"s_ipt")

#通过name获取
# driver.find_element(By.NAME,"wd")

#通过标签获取 一个网页当中有多个相同标签,不建议使用
# driver.find_element(By.TAG_NAME,'div')

#通过Xpath定位 光标移到id鼠标右键-copy-copy Xpath
# driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('selenium')

#通过css语法定位
# driver.find_element(By.CSS_SELECTOR,"#kw").send_keys('web')

#通过关键字定位 如果该窗口有多个国台办关键字只会打开第一个
# driver.find_element(By.PARTIAL_LINK_TEXT,'国台办').click()

操作表单元素

#使用clear方法清除输入框的内容
input_name = driver.find_element(By.ID,"kw")
input_name.clear()

#使用.send_keys("python")填充元素
input_name.send_keys('python')

#搜索框在网页当中是用鼠标点击的,所以在代码中也要选中这个框,然后执行click()
search = driver.find_element_by_id("国台办").click()

页面等待

        如果设置了页面等待10秒,表示最大等待时间为10秒,如果3秒网页就加载完成,剩下的7秒就无需再等待可直接操作。如果超出10秒会报错

使用方法:

WebDriverWait(当前网页,时间).当网页加载完成之后((通过ID,'找到这个元素'))
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 #EC判断元素是否加载完成

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

selenium写爬虫时遇到 iframe的问题

iframe是html标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素惠创建包含另外一个文档的内联框架(即行内框架),作用就是嵌套网页。

所以在写selenium爬虫时,要注意获取的标签是否包含在iframe内,如果是,则需要单独将iframe链接的内容提取出来,单独进行定位

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值