selenium js
这几天的任务量比较大,还有一个挺棘手的网站cfda,不巧的是数据量还挺大,40W关于企业信息。上来就是debugger pause,调试中断,开始还是挺懵逼的,但这个还算简单毕竟google,百度,就能解决。经过初步的分析,有一个难点,关于跨网页,一个字串,以及cookies是一个网页一变,要解决这个问题,其实就是去读懂js,node 或者自己python实现,虽然是可以实现,但肯定是需要花一些时间的,那不如直接selenium上手搞起来,毕竟能解决问题的方法就是好方法。
其实,cfda还是挖了一些坑的,在浏览器检测机制,因为一直用chrome比较顺手,也就用chromedriver比较多一点,这下一上来就奇怪了,点击之后返回数据为空,这明显是被发现了。但又是哪里暴露了呢?
browser.find_element_by_css_selector("#content table a:nth-child(1)").click()
直接点击既然不行,那么会不会是需要鼠标悬停,然后再点击。那么就祭出原生js,考验我js功底的时候到了
go_detail_js = "var div=document.getElementById('content');" \
"var c=div.getElementsByTagName('a')[1].click();"
browser.execute_script(go_detail_js)
这里复习一遍原生js选择元素的语法
document.getElementById("domId")
document.getElementsByName("domName")
document.getElementsByTagName("tagName")
document.getElementsByClassName("classNames")
然而实际上问题并不是出在鼠标点击事件上面。。。。而是检测到了chromedriver,于是使用FireFox解决了这个问题。
但最大的收获点不是这个,因为可利用的资源要尽可能的利用起来,与我们公司的前端讨论了一下这个问题,前端给出了一种更激动人心的写法,以至于我都不需要去写查找元素的js代码。只需要去寻找传递数据的js函数即可
go_page_js = 'location.href="javascript:devPage(%s)";' % page return_list_js = 'location.href = "javascript:viewList();"' browser.execute_script(go_page_js)
本身在浏览器控制台即可执行这些语句,果然前端教做人,毕竟使坏的都是这些前端啊。
还有一些注意点就是time.sleep需要等待页面加载完成后,才能获取page_source,以及异常处理,毕竟直接在浏览器上运行这些js代码,天有不测风云,总有出错的时候,这里需要在遇上这些情况的时候加上那么一句browser.refresh().
这样就万事大吉了,速度嘛,肯定比requests慢点,但是多进程就可以解决这个问题。
selenium js的更多相关文章
- selenium—JS点击方法
package com.allin.pc;import java.util.NoSuchElementException;import org.openqa.selenium.By;import or ...
- python + selenium + Js 处理轮动条
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...
- python+selenium+js 处理滚动条
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...
- selenium - js日历控件处理
# 13. js处理日历控件 ''' 在web自动化的工程中,日历控制大约分为两种: 1. 可以直接输入日期 2. 通过日历控件选择日期 基本思路: 利用js去掉readonly属性,然后直接输入时间 ...
- selenium - Js处理滚动条操作
# 11.Js处理滚动条操作 driver.execute_script('arguments[0].scrollIntoView();',target) target 为find_element_b ...
- Java&Selenium&JS&AWT之那些难以点击到的按钮
一.摘要 本篇博文的重点并不是简单的click()方法,而是要讲的是那些click()方法失效的时候的处理方式,其实做自动化久了我们都能发现研发的代码并不是都那么美丽,selenium支持的8种定位方 ...
- selenium + js 处理窗口
1.隐藏页面的广告窗口 document.getElementById("top_left").style.display="none"; 2.隐藏控件点击 d ...
- Python+Selenium - js操作
js操作:日期框 本部分涉及两个知识点:DOM树和js DOM树教程链接: https://www.w3school.com.cn/htmldom/index.asp js教程链接 https://w ...
- JavaScript(Node.js)+ Selenium 实现淘宝抢单
JavaScript(Node.js)+ Selenium 淘宝抢单 为了买买买我也是拼了,看了一点selenium的资料,随便写的. 程序写的比较烂,但是够我自己用了,望各路大牛指教. 使用说明: ...
随机推荐
- CMake--变量
1.一般变量 1)CMake变量引用的方式 使用${}进行变量的引用.例如: ${PROJECT_NAME} #返回项目名称 在 IF 等语句中,是直接使用变量名而不通过${}取值. 2)cmake自 ...
- day 7-6 多线程及开启方式
一. 什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程 ...
- 解决tab标签页,相同id时切换失灵的问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python学习笔记(9)--函数
函数定义: def <函数名>(<参数(0个或多个)>): 函数体 return <返回值> 参数有非可选参数,和可选参数,可选参数放在参数列表的最后,可以为可选参 ...
- mysql定时任务event——清理过期数据
需要删除数据的表名:t_req_log 建表sql CREATE TABLE `t_req_log` ( `id` ) NOT NULL AUTO_INCREMENT, `host` ) DEFAUL ...
- python设计模式第六天【原型模式】
1.定义 使用原型模式复制的对象与原来对象具有一样的结构和数据,有浅克隆和深克隆 2.应用场景 (1)希望复制原来对象的结构和数据胆步影响原来对象 3.代码实现 #!/usr/bin/env pyth ...
- css last
- Hibernate最佳实战
1:一对一,一对多,多对多双向管理必设mappedBy ,将关系交给乙方维护,不然的话会在双方都建立关系,比如一对一双向的时候双方都会保存对方的id外键管理 具体在项目中采用双向还是单项看实际情况. ...
- Nginx 模块分类
L:34
- Nginx IP地址透传
L:119