这几天的任务量比较大,还有一个挺棘手的网站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. Linux sudoers

    xxx is not in the sudoers file.This incident will be reported.的解决方法 - xiaochaoyxc - 博客园http://www.cn ...

  2. SQL性能优化-order by语句的优化

    原文:http://bbs.landingbj.com/t-0-243203-1.html 在某些情况中,MySQL可以使用一个索引来满足ORDER BY子句,而不需要额外的排序.where条件和or ...

  3. MySQL数据库性能优化思路与解决方法(一转)

     1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越 小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设 ...

  4. js判断是否是微信浏览器以及重定向

    async created () {//这个是判断是否是微信浏览器, let ua = navigator.userAgent.toLowerCase() if (ua.match(/MicroMes ...

  5. C#设计模式之2:单例模式

    在程序的设计过程中很多时候系统会要求对于某个类型在一个应用程序域中只出现一次,或者是因为性能的考虑,或者是由于逻辑的要求,总之是有这样的需求的存在,那在设计模式中正好有这么一种模式可以来满足这样的要求 ...

  6. 7 Make vs Do

    1 英语中,含有 "do" 和 "make" 的词语, 例如 "make a suggestion" 和 "do your bes ...

  7. java语句中的重定向函数

    重定向后面就不能转发了,所以return null

  8. 移动端Web界面滚动touch事件

    解决办法一: elem.addEventListener( 'touchstart', fn, { passive: false } ); 解决办法二: * { touch-action: pan-y ...

  9. Django--cookie 和 session

    一 . 会话跟踪 简单来说就是如果谢霆锋登录了淘宝,然后他点击淘宝内的任何连接就不需要在登录了,这是由于这个会话中数据共享, 也就是会话跟踪, 我们都知道http协议是短连接 无状态的,也就是说你登录 ...

  10. fiddler 笔记-设置断点

    设置断点后,可以修改httprequest的任何信息包括:host,cookie或都表单中的数据 1 Fiddler--rules--Automatic Breakpoint --before Req ...