ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5. 基于Selenium实现爬虫

2021-06-04 12:03:34  阅读:187  来源: 互联网

标签:基于 chrome driver Selenium 爬虫 bro sleep time find


selenium

  • 概念:基于浏览器自动化的模块
  • 自动化:可以通过代码指定一系列的行为动作,然后将起作用在浏览器中
  • 安装:pip install selenium
  • selenium和爬虫之间的关系
      1. 便捷的捕获到任意形式动态加载的数据
      1. 模拟登录
  • 谷歌驱动下载:http://chromedriver.storage.googleapis.com/index.html
from selenium import webdriver
import time
# 1. 基于浏览器的驱动程序实例化一个浏览器对象
bro = webdriver.Chrome(executable_path="./chromefriver")
# 2. 对目标网站发起请求
bro.get('https://jd.com')
# 3. 标签定位
search_text = bro.find_element_by_xpath('//*[@id="key"]')
search_text.send_keys('iphoneX')

btn = bro.find_element_by_xpath("//*[#id='search']/div/div[2]/button")
btn.click()

time.sleep(2)

# 在搜索结果页面进行滚轮向下滑动的操作(执行js操作:js注入)
bro.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(2)
bro.quit()
from selenium import webdriver
import time

# 后面是你的浏览器驱动位置,记得在前面加上r'',r是防止字符转义
driver = webdriver.Chrome(r'驱动程序路径')

# 用get打开百度首页
driver.get('https://www.baidu,com')

# 查找出首页的"设置"选项,并进行点击
driver.find_elements_by_link_text('设置')[0].click()
time.sleep()

# 打开设置后找到'搜索设置'选项,设置为煤业显示50条
driver.find_elements_by_link_text("搜索设置")[0].click()
time.sleep()

# 选中每页显示50条
m = driver.find_element_by_id('nr')
time.sleep()
m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
m.find_element_by_xpath('.//option[3]').click()
time.sleep()

# 点击保存设置
driver.find_elements_by_class_name('prefpanelgo')[0].click()
timee.sleep()

# 处理弹出的警告框,确定accept()  和  取消dismiss()
driver.switch_to_alert().accept()
time.sleep()

# 找到百度的搜索框,并输入'美女'
driver.find_element_by_id('kw').send_keys('美女')
time.sleep()

# 点击搜索按钮
driver.find_element_by_id('su').click()
time.sleep()

# 再打开的页面中找到“Selenium - 开源中国社区”,并打开这个也买你
driver.find_elements_by_link_text('美女_百度图片')[0].click()
time.sleep()

# 关闭浏览器
driver.quit()
url = 'http://125.35.6.84:81/xk/'
bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get(url)
page_text_list = [] # 每一页的页面源码数据
time.sleep()
# 捕获到当前页面对应的页面源码数据
page_text = bro.page_source()  # 当前页面全部加载完毕后对应的所有的数据

# 点击下一页
next_page = bro.find_element_by_xpath('//*[@id="pageIto_next"]')
next_page.click()
bro.page_source

tree = etree.HTML(page_text)
list_list = tree.xpath('//*[@id="gzlist"]/li')
for li in li_list:
    name = li.xpath('./dl/@title')[0]
    print(name)
time.sleep(2)
bro.quit()
  • selenium的弊端
    • 效率低

动作链ActionChains

  • 动作链:一系列连续的动作(滑动动作)
from selenium.webdriver import ActionChains  # 动作链
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro = webdriver.Chrome(executable='./chromedriver')
bro.get(url)
time.sleep(1)

# 如果通过find系列的函数进行标签定位,如果标签是存在与iframe里面,则会定位失败
# 解决方案:使用switch_to即可
bro.switch_to.frame('iframeResult')
div_tag = bro.find_element_by_xpath('//*[@id="draggable"]')

# 对div_tag进行滑动操作
action = ActionChains(bro)
action.click_and_hold(div_tag) # 点击且长按

for i in range(6):
    # preform让动作链立即执行
    action.move_by_offset(10,15).preform()
    time.sleep(0.5)
action.release()
bro.quit()
  • 如何selenium规避检测

    • 有的网站会检测请求是否为selenium发起的,如果是的话则让该次请求失败
    • 规避检测的方法
      • selenium接管chrome浏览器
  • 实现步骤:

      1. 必须将你的电脑中安装的谷歌浏览器的驱动程序所在的目录找到。且将目录添加到环境变量中。
      1. 打开cmd,在命令行输入命令

        • chrome.exe --remote-debugging-port=9222 -user-data-dir="一个空的文件夹的目录"
        • 指定执行结束后,会打开你本机安装好的谷歌浏览器
      1. 执行如下代码:可以使用下属代码接管步骤2打开的真实的浏览器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Oprions()
chrome_options.add_experimental_option(debuggerAddress),'1237.0.0.1:9222'
chrome_driver = '你谷歌驱动的路径'
driver = webdriver.Chrome(chrome_driver,chrome_options=chrome_options)
print(driver.title)
  • 无头浏览器(无可视化界面的浏览器)
    • 谷歌无头浏览器
    • phantomJs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 创建一个参数对象,用来控制chrome以无头界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

# 驱动路径
path = r'本机谷歌驱动的路径'

# 创建浏览器对象
browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)

# 上网
url = 'https://www.baidu.com'
browser.get(url)
time.sleep(3)

# 截图
browser.save_screeshot('baidu.png')
print(browser.page_source)

browser.quit()

标签:基于,chrome,driver,Selenium,爬虫,bro,sleep,time,find
来源: https://www.cnblogs.com/borntodie/p/14848968.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有