这几天的任务量比较大,还有一个挺棘手的网站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的更多相关文章

  1. selenium—JS点击方法

    package com.allin.pc;import java.util.NoSuchElementException;import org.openqa.selenium.By;import or ...

  2. python + selenium + Js 处理轮动条

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...

  3. python+selenium+js 处理滚动条

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...

  4. selenium - js日历控件处理

    # 13. js处理日历控件 ''' 在web自动化的工程中,日历控制大约分为两种: 1. 可以直接输入日期 2. 通过日历控件选择日期 基本思路: 利用js去掉readonly属性,然后直接输入时间 ...

  5. selenium - Js处理滚动条操作

    # 11.Js处理滚动条操作 driver.execute_script('arguments[0].scrollIntoView();',target) target 为find_element_b ...

  6. Java&Selenium&JS&AWT之那些难以点击到的按钮

    一.摘要 本篇博文的重点并不是简单的click()方法,而是要讲的是那些click()方法失效的时候的处理方式,其实做自动化久了我们都能发现研发的代码并不是都那么美丽,selenium支持的8种定位方 ...

  7. selenium + js 处理窗口

    1.隐藏页面的广告窗口 document.getElementById("top_left").style.display="none"; 2.隐藏控件点击 d ...

  8. Python+Selenium - js操作

    js操作:日期框 本部分涉及两个知识点:DOM树和js DOM树教程链接: https://www.w3school.com.cn/htmldom/index.asp js教程链接 https://w ...

  9. JavaScript(Node.js)+ Selenium 实现淘宝抢单

    JavaScript(Node.js)+ Selenium 淘宝抢单 为了买买买我也是拼了,看了一点selenium的资料,随便写的. 程序写的比较烂,但是够我自己用了,望各路大牛指教. 使用说明: ...

随机推荐

  1. Swagger UI 用法

    Swagger - 简书https://www.jianshu.com/p/4115f2b53983 Swagger简介 - Ghost Stories - CSDN博客https://blog.cs ...

  2. windows中dir命令

    最近想用dos命令打印指定目录下的所有文件夹的完整路径.最终发现可用dir命令来实现.在此学习下dir的各项命令. 32位win7系统上,打印帮助文档. D:\test>dir /? 显示目录中 ...

  3. IdentityServer4【QuickStart】之使用ResourceOwnerPassword流程来保护API

    使用ResourceOwnerPassword流程来保护API OAuth2.0中的ResourceOwnerPassword授权流程允许一个客户端发送username和password到token服 ...

  4. java.lang(StringBuffer)

    public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...

  5. jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等

    转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...

  6. jenkins了解一下,讲一下jenkins这个鬼东西

    一.jenkins是干什么的? jenkins是一个免费的集成工具,它是基于java开发的.用来做自动化部署,傻瓜化操作. 一般的项目部署流程: 开发代码——>功能测试——>打包(使用ma ...

  7. MySQL5.5 安装配置方法教程

    MySQL下载地址:http://dev.mysql.com/downloads/installer/ 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型 ...

  8. springMVC中@RequestParam和@RequestBody的作用

    @RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...

  9. linux之硬盘管理fdisk

    1.首先我们用虚拟机模拟服务器加入一块新的硬盘,硬盘容量入下图5GB硬盘. 2.首先我们要对它进行分区,我们从上面知道需要分区格式化的是第二块硬盘. 3.输入n回车是新建分区,p是主分区(只能建立4个 ...

  10. sonar结合jenkins

    一.下载jenkins插件 二.系统设置 三.获取token值 4.调整 Jenkins 构建设置