python爬虫——动态加载数据处理

selenium安装

环境安装

pip install selenium

安装浏览器驱动程序

首先在这里下载驱动
对应版本可以到这篇文章中找

使用流程

配置好环境后

  1. 实例化一个浏览器对象
  2. 编写操作代码
    • 发起请求:get(url)
    • 标签定位:find
    • 标签交互:send_keys('xxx')
    • 执行js程序:excute_script('jsCode')
    • 前进、后退:forward()back()
  3. 关闭浏览器:quit()
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver')

bro.get('https://www.taobao.com/')

#标签定位
search_input = bro.find_element_by_id('q')
#标签交互
search_input.send_keys('Iphone')

#执行一组js程序
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
#点击搜索按钮
btn = bro.find_element_by_css_selector('.btn-search')
btn.click()

bro.get('https://www.baidu.com')
sleep(2)
#回退
bro.back()
sleep(2)
#前进
bro.forward()

sleep(5)

bro.quit()

遇到iframe标签

如果定位的标签在iframe中,必须使用switch_to.frame(id)

模拟鼠标部分交互

from selenium.webdriver import ActionChains

# 实例化一个动作链对象
action = ActionChains(brower)
  • 点击并按住:click_and_hold(div)
  • 移动:move_by_offset(x,y)
  • 让动作链立即执行:perform()
  • 释放动作链对象:action.release()
from selenium import webdriver
from time import sleep
#导入动作链对应的类
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path='./chromedriver')

bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

#如果定位的标签是存在于iframe标签之中的则必须通过如下操作在进行标签定位
bro.switch_to.frame('iframeResult')#切换浏览器标签定位的作用域
div = bro.find_element_by_id('draggable')

#动作链
action = ActionChains(bro)
#点击长按指定的标签
action.click_and_hold(div)

for i in range(5):
    #perform()立即执行动作链操作
    #move_by_offset(x,y):x水平方向 y竖直方向
    action.move_by_offset(17,0).perform()
    sleep(0.5)

#释放动作链
action.release()

bro.quit()

实现无头浏览器

无头浏览器就是没有可视化界面的selenium

from selenium import webdriver
from time import sleep
#实现无可视化界面
from selenium.webdriver.chrome.options import Options
#实现规避检测
from selenium.webdriver import ChromeOptions

#实现无可视化界面的操作
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

#实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])

#如何实现让selenium规避被检测到的风险
bro = webdriver.Chrome(executable_path='./chromedriver',chrome_options=chrome_options,options=option)

#无可视化界面(无头浏览器) phantomJs
bro.get('https://www.baidu.com')

print(bro.page_source)
sleep(2)
bro.quit()

你可能感兴趣的:(python)