selenium 操作 获取动态页面数据
- # 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 操作 获取动态页面数据的更多相关文章
- selenium抓取动态网页数据
1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...
- ajax获取动态列表数据后的分页问题
ajax获取动态列表数据后的分页问题 这是我在写前台网站时遇到的一个分页问题,由于数据是通过ajax的方式来请求得到的,如果引入相应的js文件来做分页,假如只是静态的填放数据到列表各项内容中(列表条数 ...
- selenium+phantomjs爬取动态页面数据
1.安装selenium pip/pip3 install selenium 注意依赖关系 2.phantomjs for windows 下载地址:http://phantomjs.org/down ...
- js子页面获取父页面数据
做页面预览的时候,数据没有存入数据库,但是要打开一个页面进行预览,询问众大婶,原来是这样来做. 1.父页面 <input type="text" id="name& ...
- layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法
var frameId = $(layero).find("iframe").attr('id');//父页面获取子页面的iframe var id = $(window.fram ...
- jquery发起get/post请求_或_获取html页面数据
备注:我们经常会遇到使用jquery获取某个地址下的部分页面内容,然后替换当前页面对应内容,也就是:局部刷新功能. 当然也可以使用get/post请求获取数据,修改数据,可以参考以下JS代码: 走过的 ...
- Jsoup获取部分页面数据失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...
- Jsoup获取部分页面数据失败 Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml
用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不符合要求. 请求代码如下: private static ...
- layui父页面获取子页面数据
var doc = layero.find('iframe')[0].contentDocument; var test= $(doc).find("input[name='test']&q ...
随机推荐
- Sampling Distribution of the Sample Mean|Central Limit Theorem
7.3 The Sampling Distribution of the Sample Mean population:1000:Scale are normally distributed with ...
- cs231n spring 2017 lecture8 Deep Learning Networks
1. CPU vs. GPU: CPU核心少(几个),更擅长串行任务.GPU有很多核心(几千个),每一个核都弱,有自己的内存(几个G),很适合并行任务.GPU最典型的应用是矩阵运算. GPU编程:1) ...
- printf 输出浮点数
在测试printf函数输出结果时,写了如下代码: /** * printf:格式化输出函数 * printf函数不会按照格式控制而对数据类型进行转换,不管三七二十一, * 抓到二进制数据就按照格式控制 ...
- 推荐几位jenkins发布war包和jar包大佬的博客
jenkins部署tomcat的war包和jar包 https://blog.csdn.net/liuxiaoming1109/article/details/89311696
- JAVA WEB期末项目第二阶段成果
我们做的系统是一个基于Java web与MySQL的食堂订餐系统 班级: 计科二班 小组成员:李鉴宣.袁超 1.开发环境 开发编辑器使用:Visual Studio Code 数据库使用:MySQL8 ...
- [PyTorch入门]之从示例中学习PyTorch
Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...
- RocketMQ介绍与实践
一.RocketMQ介绍 1.相关术语名词 1. NameSrv:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步. 2. Broker:分为Master与Slave,一个 ...
- appium使用相对坐标定位元素
最近在用appium做自动化时发现,有一些元素无法通过uiautomatorviewer进行定位,这样就只能通过相对坐标来进行定位了.但是,问题又来了:如何获取元素的坐标呢? 在网上找了半天也没找到相 ...
- PHP正则表达式-修饰符
我们在PHP正则表达式的学习中会碰到修饰符,那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢?那么我们来具体的看看它的概念以及相关内容.在学习PHP正则表达式修饰符之前先来理解下贪婪模式 ...
- MyBatis 判断条件为等于的时候,常量需要加 .toString()
当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test=& ...