# 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. 前端-html-长期维护

    ###############     前端学什么?    ################ # 前端三大部分 # HTML,页面内容,学习标签 # CSS,页面样式,学习选择器和属性 # JS,页面 ...

  2. jmeter压测遇到的问题

    一.今天压力测试时,开始12秒后出现了很多异常, 都是 java.net.NoRouteToHostException: Cannot assign requested address. 1.首先我这 ...

  3. POJ 1815 网络流之拆点(这个题还需要枚举)

    传送门:http://poj.org/problem?id=1815 题意:给N个点,已知S与T,和邻接矩阵,求拆掉那些点会减小最大流. 思路:点之间有线连接的在网络中的权值为inf,没有的就不用管, ...

  4. Docker Linux下安装

    下载脚本并运行安装: sudo wget -qO- https://get.docker.com/ | sh wget:下载文件工具, -q:不显示指令执行过程, -O-:-O-以'-'作为file参 ...

  5. nginx部署静态文件站点

    server { listen PORT; #PORT为监听端口 server_name SERVER_NAME; #SERVER_NAME为域名 charset utf-8; autoindex o ...

  6. Ubuntu18.04安装Fabric

    本文介绍如何在Ubuntu18.04中搭建Fabric1.4实验环境,默认使用root用户. 1.安装Golang 首先下载Golang安装包,安装包可以从这里下载.这里下载的是go1.13.4.li ...

  7. jQuery学习笔记三

    使用fadeIn()js解释器会将所选元素的CSS opacity属性从0改为100,fadeTo()会动画显示所选元素,将它为改为某个特定的透明度百分比,使用fadeOut()js解释器会将所选元素 ...

  8. uniq命令使用方法

    uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次! 接下来通过实践实例说明: [root@stu100 ~]# cat test boy took bat home boy took ...

  9. OpenCV3入门(十一)图像直方图

    1.直方图的概念 灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数.确定图像像素的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像素 ...

  10. JavaScript中的innerHTML属性的使用

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.html * 作者:常轩 * 微信公众号:Worldh ...