爬虫——selenium基础
Selenium,自动化浏览器技术。主要用于web应用自动测试和自动完成web基本任务管理。
官方网站:https://selenium-python.readthedocs.io/getting-started.html #使用selecnuim访问指定网页并打印相关信息
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get("https://cn.bing.com/?mkt=zh-CN&mkt=zh-CN")
print(browser.current_url) #浏览器当前请求路径
print(browser.get_cookies()) #cookei信息
print(browser.page_source) #网页源代码
browser.close()
#通过指定方法获取单个元素
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get("https://www.taobao.com")
one = browser.find_element_by_id('q')
two = browser.find_element_by_css_selector('#q')
three = browser.find_element_by_xpath('//*[@id="q"]') #路径表达式
print(one)
print(two)
print(three)
browser.close()
#通过指定方法查找多个元素
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get("https://www.taobao.com")
list = browser.find_elements_by_css_selector('#q')
print(list)
browser.close()
#通过指定参数的方法查找多个元素
from selenium import webdriver
from selenium.webdriver.common.by import By browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get("https://www.taobao.com")
list = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
print(list)
browser.close()
通过指定参数获取单个元素
from selenium import webdriver
from selenium.webdriver.common.by import By browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get("https://www.taobao.com")
one = browser.find_elements(By.ID,'q')
print(one)
browser.close()
#模拟用户操作浏览器
from selenium import webdriver
import time browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q') #获取搜索框对象
input.send_keys('华为') #输入‘华为’
time.sleep() #暂停一秒
input.clear() #清楚搜索框
input.send_keys('小米') #再次搜索
button = browser.find_element_by_class_name('btn-search') #获取按钮对象
button.click() #点击按钮
'''
等待加载技术,获取DOM元素时,若浏览器本身没有加载完毕,python代码运行就会报错。
因此使用等待的方法,在指定时间内进行等待,超时就报出异常。
'''
#隐式等待(全局等待),当DOM元素没有出现时,过N秒之后再查找。N默认值为0;
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.implicitly_wait()#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
#显式等待(智能等待),设置等待时间和等待条件
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 browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))#10秒内id为q的元素被加载出来
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))#10秒内按钮可以点击
print(input, button)
'''
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字
frame_to_be_available_and_switch_to_it frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert
'''
#页面的后退和关闭
import time
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back() #后退
time.sleep()
browser.forward() #前进
browser.refresh() #刷新
browser.close() #关闭当前窗口
browser.quit() #关闭所有窗口
import time
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') #新增选项卡
print(browser.window_handles) #获取所有窗口的句柄,句柄就是每个窗口的标识,想要获取某个窗口的资源就必须先拿到他的句柄。
browser.switch_to.window(browser.window_handles[]) #切换到句柄为 browser.window_handles[1]的窗口,也就是第二个窗口
browser.get('https://www.taobao.com')
time.sleep()
browser.switch_to.window(browser.window_handles[]) #切换到第一个窗口
browser.get('http://www.fishc.com')
#异常处理
#在写代码的时候某些报错不够明确,所有可以借助selenium来进行异常处理
#原文
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello') #增加异常处理
from selenium import webdriver browser = webdriver.Chrome(r"D:\工具包\chromedriver.exe")
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello') from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException browser =webdriver.Chrome(r"D:\工具包\chromedriver.exe")
try:
browser.get('https://www.baidu.com')
except TimeoutException:
print('Time Out')
try:
browser.find_element_by_id('hello')
except NoSuchElementException:
print('No Element')
finally:
browser.close()
爬虫——selenium基础的更多相关文章
- 【Python爬虫】selenium基础用法
selenium 基础用法 阅读目录 初识selenium 基本使用 查找元素 元素互交操作 执行JavaScript 获取元素信息 等待 前进后退 Cookies 选项卡管理 异常处理 初识sele ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...
- Python+Selenium基础入门及实践
Python+Selenium基础入门及实践 32018.08.29 11:21:52字数 3220阅读 23422 一.Selenium+Python环境搭建及配置 1.1 selenium 介绍 ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...
- Python 爬虫四 基础案例-自动登陆github
GET&POST请求一般格式 爬取Github数据 GET&POST请求一般格式 很久之前在讲web框架的时候,曾经提到过一句话,在网络编程中“万物皆socket”.任何的网络通信归根 ...
随机推荐
- 【PAT】B1009 说反话
在输入时直接分别将每个单词放入字符串,逆序输出字符串数组 #include<stdio.h> int main(){ int num=0; char ans[90][90]; while( ...
- LeetCode算法题-Contains Duplicate(Java实现)
这是悦乐书的第192次更新,第196篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第52题(顺位题号是217).给定一个整数数组,查找数组是否包含任何重复项.如果数组中至 ...
- C语言 投票系统:给定候选人,从键盘输入候选人的名字,统计票数,并输出最终获胜者
投票系统:给定候选人名单,从键盘输入候选人的名字,统计票数,并输出最终获胜者.若投票人输入的名字不在其候选名单上,则该票数无效. //凯鲁嘎吉 - 博客园 http://www.cnblogs.com ...
- Java操作Excel(使用JXL)
一.本地操作 1.读取 package com.ljf.mb; import java.io.FileInputStream; import java.io.InputStream; import j ...
- nginx学习笔记(一)
select模型主要是apache用 FD 文件描述符 soa架构 安装nginx ping baidu.com netstat -lntup 查看端口 cat /etc/redhat-rel ...
- SQLite 线程安全和并发
SQLite 与线程 SQLite 是线程安全的. 线程模型 SQLite 支持如下三种线程模型 单线程模型 这种模型下,所有互斥锁都被禁用,同一时间只能由一个线程访问. 多线程模型 这种模型下,一个 ...
- java 关于打断点
比如:前台传过来参数中文乱码,需要decode才可以使用, 判断问题. debug 在 DispatcherServlet OncePerRequestFilter 打断点, 查看前台过来的中文在哪里 ...
- UVA1616-Caravan Robbers(枚举)
Problem UVA1616-Caravan Robbers Accept: 160 Submit: 1156Time Limit: 3000 mSec Problem Description O ...
- CSAPP:第六章 存储器层次结构
存储器层次结构 关键点:内存 6.1 随机访问存储器6.2 局部性6.3 存储器层次结构 6.1 随机访问存储器 随机访问存储器(Random-Access Memory,RAM)分为两类:静态的 ...
- Flask 框架 debug=Ture 和Json解码:
Flask框架常用配置文件: 以下推荐四种方法: (一):创建一个配置类. (二):正常代码配置文件. 接下下来两种方法需要新建文件: 步骤为: 1:在当前目录下新建一个文件,名字为:config.i ...