ICode9

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

Selenium 与 PhantomJS

2021-05-23 17:59:07  阅读:200  来源: 互联网

标签:webdriver 浏览器 PhantomJS Selenium selenium import find browser


文章目录

1、selenium介绍

介绍:
1.selenium是一个web自动化测试用的框架. 程序员可以通过代码实现对浏览器的控制, 比如打开网页, 点击网页中的元素, 实现鼠标滚动等操作.
2.它支持多款浏览器, 如谷歌浏览器, 火狐浏览器等等, 当然也支持无头浏览器.
目的:
在爬取数据的过程中, 经常遇到动态数据加载, 一般动态数据加载有两种, 一种通过ajax请求加载数据, 另一种通过js代码加载动态数据. selenium可以模拟人操作真实浏览器, 获取加载完成的页面数据
ajax:
url有规律且未加密, 直接构建url连接请求
url加密过无法破解规律 --> selenium
js动态数据加载 --> selenium三要素: 浏览器, 驱动程序, selenium框架
浏览器: 推荐谷歌浏览器, 标准稳定版本
驱动程序:http://chromedriver.storage.googleapis.com/index.html
pip install selenium

2、selenium安装


三要素: 浏览器, 驱动程序, selenium框架
	浏览器: 推荐谷歌浏览器, 标准稳定版本
	驱动程序:http://chromedriver.storage.googleapis.com/index.html
	pip install selenium
    
# 测试:
from selenium import webdriver
browser = webdriver.Chrome('./chromedriver.exe')   # 将驱动放在脚本所在的文件夹
browser.get('https://www.baidu.com')

3.selenium常用操作


# 实例化浏览器对象:
from selenium import webdriver
browser = webdriver.Chrome('driverpath')

# 发送get请求:
browser.get('https://www.baidu.com')

# 获取页面元素:
find_element_by_id:根据元素的id
find_element_by_name:根据元素的name属性
find_element_by_xpath:根据xpath表达式
find_element_by_class_name:根据class的值
find_element_by_css_selector:根据css选择器

# 节点交互操作:
click(): 点击
send_keys(): 输入内容
clear(): 清空操作
execute_script(js): 执行指定的js代码
# JS代码: window.scrollTo(0, document.body.scrollHeight)可以模拟鼠标滚动一屏高度
quit(): 退出浏览器

# 获取网页的数据:
browser.page_source   --->  str类型

# frame
switch_to.frame('frameid') 

4.qq空间模拟登陆

from selenium import webdriver
import time
# 实例化浏览器对象
browser = webdriver.Chrome('./chromedriver.exe')
# 打开qq空间登陆页面
browser.get('https://qzone.qq.com/')
time.sleep(1)
# 转至frame子页面
browser.switch_to.frame('login_frame')
# 获取密码登陆选项并点击
a_tag = browser.find_element_by_id('switcher_plogin')
a_tag.click()
time.sleep(1)
# 获取账号输入框并输入账号
browser.find_element_by_id('u').clear()
user = browser.find_element_by_id('u')
user.send_keys('3338003899')
time.sleep(1)
# 获取密码输入框并输入密码
browser.find_element_by_id('p').clear()
pwd = browser.find_element_by_id('p')
pwd.send_keys('qq123456')
time.sleep(1)
# 获取登陆按钮并单击
button = browser.find_element_by_id('login_button')
button.click()

5、百度图片抓取

import time
import requests
from selenium import webdriver
from bs4 import BeautifulSoup
from urllib import request



# 1.实例化浏览器对象
browser = webdriver.Chrome('./chromedriver.exe')

# 2.向服务器发起请求
browser.get('http://image.baidu.com/')
time.sleep(2)

# 3.输入关键字
input_tag = browser.find_element_by_id('kw')
input_tag.send_keys('腰子姐')
time.sleep(2)

# 4.点击搜索
button = browser.find_element_by_class_name('s_search')
button.click()
time.sleep(2)

# 5.实现滚动下拉
for i in range(3):
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    time.sleep(3)


text = browser.page_source

# 6.实现数据解析
soup = BeautifulSoup(text, 'lxml')

li_list = soup.select('.imgpage ul li')

headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}

for li in li_list:
    href = li['data-objurl']
    # print(href)
    # request.urlretrieve(href, '%s.jpg'%li_list.index(li))
    res = requests.get(url=href, headers=headers)
    # res.text: 文本数据
    # res.json(): json数据
    # res.content: 二进制流
    with open('%s.jpg'%li_list.index(li), 'wb') as f:
        f.write(res.content)

browser.quit()

6、PhantomJS浏览器使用


# PhantomJS下载及配置环境变量
	- 下载, 直接解压
	- 将解压文件的bin目录添加至环境变量
    
# PhantomJS无界面浏览器
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
with open('baidu_phantomjs.html', 'w', encoding="utf-8") as f:
    f.write(browser.page_source)
    
# 谷歌无头浏览器
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.baidu.com")
print(browser.page_source)
with open('baidu_headerless.html', 'w', encoding='utf-8') as f:
    f.write(browser.page_source)

7、图片懒加载

import requests
from lxml import etree
from urllib import request
import urllib
url = 'http://sc.chinaz.com/tupian/index.html'
headers = {
    "USer-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
res = requests.get(url=url, headers=headers)
res.encoding = 'utf-8'
# print(res.text)
tree = etree.HTML(res.text)

src_list = tree.xpath('//div[contains(@class,"box")]/div/a/img/@src2')
for url_img in src_list:
    request.urlretrieve(url_img,'%s.jpg'%src_list.index(url_img))
from selenium import webdriver
import time

browser = webdriver.Chrome('./chromedriver.exe')
browser.get('http://image.baidu.com/')
search = browser.find_element_by_id('kw')
search.send_keys('安琪拉')
button = browser.find_element_by_class_name('s_search')
button.click()
for i in range(3):
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    time.sleep(5)

text = browser.page_source
with open('baidu_pic.html', 'w', encoding="utf-8") as f:
    f.write(text)

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('./baidu_pic.html', 'r', encoding='utf-8'), 'lxml')
li_list = soup.select('.imgpage ul li')
for url_img in li_list:
    url_img = url_img['data-objurl']
    print(url_img)

标签:webdriver,浏览器,PhantomJS,Selenium,selenium,import,find,browser
来源: https://blog.csdn.net/weixin_45139342/article/details/117198054

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

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

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

ICode9版权所有