# selenium

from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') time.sleep(5) driver.close() # 关闭页面
driver.quit() # 关闭整个浏览器
# selenium 定位元素  常用的6种
# find_element只获取满足条件的第一个, find_elements获取所有满足条件的 1.find_element_by_id
2.find_element_by_class_name
3.find_element_by_name
4.find_element_by_tag_name
5.find_element_by_xpath
6.find_element_by_css_selector ############################
from selenium import webdriver
import time
from lxml import etree driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 使用 xpath 方式获取 效率高 如果只是解析页面就使用这种
tree = etree.HTML(driver.page_source)
li_lists = tree.xpath('xxxxxxxxxx') # 通过id 的方式获取 如果对元素进行操作时,
# 比如要发送字符串, 点击按钮, 下拉操作 就使用这种方法
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python') time.sleep(3)
driver.close() # 关闭页面
# driver.quit() # 关闭整个浏览器
# 常见的表单元素:
# input标签 type='text/password/email/number' 属于文本框
# button、input type='submit'
# checkbox type=‘checkbox’
# ###############
# 操作表单元素
# 1. 操作输入框
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python')
time.sleep(3) # 2. 操作checkbox标签 豆瓣为例
rememberBtn = driver.find_element_by_name('remember')
rememberBtn.click() # 3. 操作select标签 要用Select类
from selenium import webdriver
from selenium.webdriver.support.ui import Select selectBtn = Select(driver.find_element_by_name('jumpMenu'))
selectBtn.select_by_index(1) # 通过index 选中下拉框里的选项
# selectBtn.select_by_visible_text('95秀客户端') 通过文本内容选中 # 4. 按钮的点击事件
inputTag = driver.find_element_by_id('kw') #拿到输入框按钮
inputTag.send_keys('python')
submitTag = driver.find_element_by_id('su') #拿到点击按钮
submitTag.click()
# selenium 的行为链   简单介绍   有时候页面中的操作有很多步,需要一系列操作
# 在爬虫中用的不多, 在测试用的多 from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 拿到两个标签
inputTag = driver.find_element_by_id('kw')
submitBtn = driver.finr_element_by_id('su') actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitBtn)
actions.click(submitBtn)
actions.perform()
# 在selenium中  cookies操作
# 1.获取所有的cookie
for cookie in driver.get_cookies():
print(cookie) # 2.根据cookie的key获取value
value = driver.get_cookie(key) # 3.删除所有的cookie
driver.delete_all_cookies() # 4.删除某一个cookie
driver.delete_cookie(key) #################################
from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') for cookie in driver.get_cookies(): # 获取的是百度域名下的所有cookie
print(cookie)
# 页面等待  重要 防止数据没有被加载就开始使用
# 因为页面很多用ajax技术,有时候要使用的数据没有加载出来,这时候使用就会报错.所以selenium提供两种等待方式 # 隐式等待: 调用driver.implicitly_wait. 那么获取不可用元素之前会先等待10秒时间.
driver = webdriver.Chrome(executble_path=driver_path)
driver.implicitly_wait(10) # 设置等待时间
driver.get('https://www.baidu.com/') #请求访问 # 显示等待:表明某个条件成立之后才执行获取元素的操作.
# 也可以在等待的时候制定一个最大的时间,如果超过这个时间那么久跑出异常.
# 显示等待使用selenium.webdriver.support.excepted_condition期望条件 和 selenium.webdriver.support.ui.webDriverWait配合完成
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 等待10秒后找这个对应的id标签, 因为是错误的所以等待10秒后报错
# 如果是正确的id 标签, 找到后直接继续执行, 不会等10 秒
WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.ID,'shjdkah'))
)
# 打开多个窗口, 切换页面  重要 ******

from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 打开豆瓣
driver.execute_script('window.open("https://www.douban.com/")')
# 但是当前的driver还是停留在baidu页面
print(driver.current_url)
print(driver.window_handles) # 窗口句柄 看看现在打开的窗口有什么
driver.switch_to_window(driver.window_handles[1]) # 切换窗口
print(driver.current_url) # 虽然在窗口中切换到了新的页面,但是driver中还没有切换
# 如果想要在代码中切换到新的页面,并且做爬虫
# 那么应该使用dirver.switch_to_window来切换到指定的窗口
# 从dirver.window_handler中取出具体的第几个窗口
# driver.window_handlers是一个列表,里面装的都是窗口句柄
# 它会按照打开页面的顺序存储窗口句柄
# selenium 设置代理ip  主要是添加一个option参数就可以了

from selenium import webdriver

# 设置代理
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server-http://112.247.176.104:8060") driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')

selenium 操作 获取动态页面数据的更多相关文章

  1. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

  2. ajax获取动态列表数据后的分页问题

    ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...

  3. selenium+phantomjs爬取动态页面数据

    1.安装selenium pip/pip3 install selenium 注意依赖关系 2.phantomjs for windows 下载地址:http://phantomjs.org/down ...

  4. js子页面获取父页面数据

    做页面预览的时候,数据没有存入数据库,但是要打开一个页面进行预览,询问众大婶,原来是这样来做. 1.父页面 <input type="text" id="name& ...

  5. layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法

    var frameId = $(layero).find("iframe").attr('id');//父页面获取子页面的iframe var id = $(window.fram ...

  6. jquery发起get/post请求_或_获取html页面数据

    备注:我们经常会遇到使用jquery获取某个地址下的部分页面内容,然后替换当前页面对应内容,也就是:局部刷新功能. 当然也可以使用get/post请求获取数据,修改数据,可以参考以下JS代码: 走过的 ...

  7. Jsoup获取部分页面数据失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  8. Jsoup获取部分页面数据失败 Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml

    用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...

  9. layui父页面获取子页面数据

    var doc = layero.find('iframe')[0].contentDocument; var test= $(doc).find("input[name='test']&q ...

随机推荐

  1. C++中stoi函数

    作用: 将 n 进制的字符串转化为十进制 头文件: #include <string> 用法: stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制 示例: stoi(s ...

  2. HTML table表头固定

    HTML table表头固定 说说我在最近项目中碰到的css问题吧,作为问题知识集合总结笔记: <!DOCTYPE html> <html> <head> < ...

  3. HDU1233 还是畅通工程

    题目: Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连 ...

  4. 全文检索ElasticSearch的简单使用笔记

    工具:kibana GET _search { "query": { "match_all": {} } } #创建索引结构 PUT sku { "m ...

  5. MyBatis基本使用步骤

    MyBatis是一个数据持久层(ORM)框架.把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现.MyBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度 ...

  6. Ionic3学习笔记(六)存储之使用 SQLite

    本文为原创文章,转载请标明出处 目录 安装 CURD操作 1. 安装 命令行输入 ionic cordova plugin add cordova-sqlite-storage npm install ...

  7. Harbor快速搭建企业级Docker仓库

    Github: https://github.com/goharbor/harbor 改端口安装: https://www.cnblogs.com/huangjc/p/6420355.html 相关博 ...

  8. 三层交换机配置DHCP为不同VLAN分配IP地址

    三层交换的原理以及DHCP的原理,作者在这里就不详细的解释了,在这里通过一个案例来了解使用三层交换做DHCP服务器,并为不同网段分配IP地址.在生产环境中,使用路由器或交换机做DHCP服务器要常见一些 ...

  9. Elasticsearch,Filebeat,Kibana部署,添加图表及elastalert报警

    服务端安装 Elasticsearch和Kibana(需要安装openjdk1.8以上) 安装方法:https://www.elastic.co以Ubuntu为例: wget -qO - https: ...

  10. Vue内置组件keep-alive的使用

    本文主要介绍Vue内置组件keep-alive的使用. Vue内置组件keep-alive的使用 keep-alive接收三个props:●include - 字符串或正则表达式.只有名称匹配的组件会 ...