python爬虫[笔记记录一]
python爬虫[笔记记录二]
Selenium是一个用于测试Web应用程序的可移植框架。Selenium提供了一个回放(以前也是录制)工具,用于编写功能测试而无需学习测试脚本语言(Selenium IDE)。它还提供了一种特定于测试领域的语言(Selenese),可以用许多流行的编程语言编写测试,包括C#,Groovy,Java,Perl,PHP,Python,Ruby和Scala。然后,测试可以针对大多数现代Web浏览器运行 。Selenium在Windows,Linux和macOS平台上部署 (来自wiki)
我的环境:python3.7.1
所有代码,均有注释
安装selenium1
pip3 install selenium
安装chromedriver
这里我使用的是chromedriver驱动,所以请注意,你需要提前下载到这些镜像站去下载chromedriver,然后将它安装在你的计算机上,并设置环境变量
http://chromedriver.storage.googleapis.com/index.html
https://npm.taobao.org/mirrors/chromedriver/
linux操作系统你可以直接将他复制到/usr/bin/目录下,而windows系统你只需要在计算机环境变量那个位置设置好你的chromedriver路径即可
或者你可以直接指定chromedriver位置,具体可以看下面代码
基本用法:登录
这是一个简单的登录,当访问页面的时候,利用time.sleep(1)来让程序等待1秒,防止页面在刷新的时候程序异常
1 | from selenium import webdriver |
基本用法:一些常见的点击以及输入
这里利用 switch_to.frame 切换到找到的iframe标签里面去,最后在里面输入内容,最后利用switch_to.parent_frame()回到上一级窗口中,如果iframe里面还有iframe,如果你有需要,那么你可以多次利用这个方法
1 | def browser_input(browser): |
基本用法:加代理访问页面
在有的时候,可能需要访问一些国外网站,或者某内网网站,但是你在外网无法访问,这个时候就可以利用代理去访问
我这里使用的是socks5,当然你可以使用https或者http去访问,方法是一样,只需要将socks5修改一下即可
1 | def web_proxy(): |
基本操作:获取页面上的html代码
注意,这种办法可以获取网页源代码不存在,而在elements里面存在的内容
1 | elem_text = browser.find_element_by_xpath('//ul [@id="text_xx"]') # 定位到ul标签 |
其他操作:执行js代码
利用execute_script可以执行js代码,因为在某些情况下,我们无法点击页面内容,原因可能是当前屏幕上selenium没有看到那个内容,内容在下一页,所以这个时候我们可以执行js代码,让屏幕下移动到纵坐标,之后就又可以进行屏幕上的操作
1 | browser.execute_script('window.stop()') # #调用js方法,同时执行javascript代码,这里的window.stop()是暂停 |
其他操作:切换窗口
这种情况一般是你点击了一个a标签,然而他新建了一个窗口,所以你需要切换到第二个窗口去执行操作,这个时候就会用到switch_to.window,类似switch_to.frame
1 | window_1 = browser.current_window_handle # 获取当前窗口 |
神操作:设置页面加载时间
这个好像没多少资料,我也是之前查询资料才查询到的
主要是可以设置selenium加载页面多久,在页面访问比较慢的时候可以使用这个
当然,它是一个全局参数,你后面每次使用get方法,都生效
1 | def web_load_time(): |
神操作:无界面selenium
这个应该是比较常用的,因为在某些情况下,我们需要用selenium自动化,之后需要设置定时,每天去对某个网站的内容进行爬取,这种情况,我们不可能天天在那个时间段登录服务器,然后执行脚本。这样是很费神的,所以selenium有一个无界面的操作,让你命令行模式也可以使用selenium
运行环境centos7
软件:chrome chromedriver python3.x Xvfb
使用的python库:selenium pyvirtualdisplay
selenium 安装:
安装很简单 从http://chromedriver.storage.googleapis.com/index.html 下载对应selenium的chromedriver版本,对应版本具体可以百度
然后设置软连接,设置权限1
2ln -s 你的chromedriver路径 /usr/bin/chromedriver
chmod 777 chromedriver
chrome 安装:
1 | cd /ect/yum.repos.d/ #打开centos存放yum的目录 |
写入下面的配置:1
2
3
4
5
6[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
1 | yum -y install google-chrome-stable # 安装chrome浏览器 |
找到chrome的路径1
2which google-chrome-stable # 找路径
ln -s 路径 /bin/chrome # 创建软连接
解决root用户不能运行chrome1
2编辑启动文件: /opt/google/chrome/google-chrome
将最后一行改写为: exec -a "$0" "$HERE/chrome" "$@" --no-sandbox $HOME
安装Xvfb1
2
3
4yum update
yum install Xvfb
yum install libXfont
yum install xorg-x11-fonts*
安装selenium、pyvirtualdisplay1
2pip install selenium
pip install pyvirtualdisplay
测试代码:
1 | # /usr/bin/env python |
参考:
https://blog.csdn.net/ZincZhang/article/details/79797847
https://blog.csdn.net/lilongsy/article/details/76142497