python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作...
1.参考
利用 Python + Selenium 自动化快速截图
利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)
使用python获取系统所有进程PID以及进程名称
python锁定焦点到指定进程窗口的参考方法
2.改进js代码,下拉和上拉,精确判断加载是否结束
#!/usr/bin/env python# -*- coding: UTF-8 -*import time from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.common.exceptions import NoSuchElementException, TimeoutExceptionfrom selenium.webdriver.common.action_chains import ActionChains def scroll_page(url, browser='chrome'):if browser=='chrome':driver = webdriver.Chrome()else:driver = webdriver.Firefox() #右键异常 ActionChains(driver).context_click(e).perform()# driver = webdriver.PhantomJS() #可截长图!可是加载长网页时间超长?driver.set_window_size(1200, 900)driver.get(url) # Load pagestart = time.time()print driver.title driver.execute_script("""(function () {var y = 0;var step = 1000; //100window.scroll(0, 0);function f() {if (y < document.body.scrollHeight) {y += step;window.scroll(0, y);setTimeout(f, 100); //100 递归循环调用} else {if(document.title.indexOf("scroll-done") < 0){ //-1 找不到,还没执行下文的driver.execute_scripty -= step;window.scroll(0, y);setTimeout(f, 100); //100 //window.scroll(0, 0);//document.title += "scroll-done";}//else{//window.scroll(0, 0);//}}}setTimeout(f, 1000); //1000})();""")#拉到最后 出现元素“没有更多了”WebDriverWait(driver, 500).until(lambda x: x.find_element_by_xpath('//div[@style="text-align:center"]/em')) #或者引发 TimeoutException#停止上面的js到终点再上拉 循环driver.execute_script("""(function () {function f() {document.title += " scroll-done";}setTimeout(f, 1000);})();""")# <div class="js-infinite-layout"># <div class="js-infinite-item"># Jetbrains公司正式发布Pycharm 5rst = driver.find_element_by_xpath('//div[@class="js-infinite-item"][last()]//div[@class="header"]').text #不能在path内部写入 text()print rstif rst != u'Jetbrains公司正式发布Pycharm 5':raise RuntimeError('wrong!!!')print time.time()-startprint driver.title# time.sleep(3) #执行js也需要时间WebDriverWait(driver, 10).until(lambda x: x.title == u'编程派 | Coding Python scroll-done') #或者引发 TimeoutExceptionprint driver.title return driver
3.通过pid进程号和窗口标题定位窗口并前置
import win32conimport win32guiimport win32processimport psutil def get_hwnds_for_pid (pid):def callback (hwnd, hwnds):if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):_, found_pid = win32process.GetWindowThreadProcessId(hwnd)if found_pid == pid:hwnds.append(hwnd)return Truehwnds = []win32gui.EnumWindows(callback, hwnds)return hwndsdef set_process_foreground(pid_part_name, pid_window_text):pids_target = []for pid in psutil.pids():p = psutil.Process(pid)if pid_part_name in p.name().lower(): #'chrome.exe' 'EXCEL.EXE' pids_target.append(pid)for pid in pids_target:for hwnd in get_hwnds_for_pid(pid):# 92292 chrome.exe 137328 编程派 | Coding Python - Google Chrome# EXCEL.EXE 857830 Microsoft Excel - Book1.xlsx# 90644 firefox.exe 595556 编程派 | Coding Python scroll-done - Mozilla Firefoxif pid_window_text.encode('gbk') in win32gui.GetWindowText(hwnd): print pid, psutil.Process(pid).name(), hwnd, win32gui.GetWindowText(hwnd)win32gui.SetForegroundWindow(hwnd)returnraise RuntimeError('process not found')
4.通过autopy实现右键操作,以及网页另存为
from autopy import key, mouse def save_result(driver): time_for_filename = time.strftime('%H%M%S')with open('%s.html'%time_for_filename,'wb') as f:f.write(driver.page_source.encode('utf-8'))# e = driver.find_element_by_xpath('//img[@src="/static/images/logo.png"]')# ActionChains(driver).context_click(e).perform() # time.sleep(1.5)# esc 退出右键菜单# key.tap(key.K_ESCAPE)# driver.set_window_position(0,0)# window_position = driver.get_window_position() # {u'x': 10, u'y': 10}# mouse.move(int(window_position['x']+150), int(window_position['y']+150)) #右键再左键 避免错误点开链接# mouse.click(mouse.RIGHT_BUTTON) # mouse.click(mouse.LEFT_BUTTON)# 关键是浏览器位于foreground set_process_foreground(driver.name,driver.title)key.tap('s', key.MOD_CONTROL)time.sleep(1.5) key.type_string(time_for_filename)time.sleep(0.5) key.tap(key.K_RETURN) driver.save_screenshot('%s.png'%time_for_filename)# driver.close()if __name__ == "__main__":browser = 'chrome'# browser = 'firefox'url = "http://codingpy.com"driver = scroll_page(url,browser)save_result(driver)print 'All DONE'
转载于:https://www.cnblogs.com/my8100/p/7233444.html
python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作...相关推荐
- html滚动条怎么置顶,js控制滚动条到最底端(置底)和最顶端(置顶)
滚动条样式: body { SCROLLBAR-FACE-COLOR: #f892cc; SCROLLBAR-HIGHLIGHT-COLOR: #f256c6; SCROLLBAR-SHADOW-CO ...
- JS控制滚动条的位置 JS控制TextArea滚动条自动滚动到最下部
S控制滚动条的位置 window.scrollTo(x,y); 竖向滚动条置顶 window.scrollTo(0,0); 竖向滚动条置底 window.scrollTo(0,document.bod ...
- python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
全栈工程师开发手册 (作者:栾鹏) python教程全解 其中使用到了urllib.BeautifulSoup爬虫和结巴中文分词的相关知识. 调试环境python3.6 # 根据连接爬取中文网站,获取 ...
- 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作
看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox( ...
- 用JS控制下拉菜单效果
今天,突然想复习下之前学习做导航菜单的一些知识.之后觉得下拉菜单非常好玩儿,于是自己试着用JS调出了效果.网上有众多方法,但是感觉不是很对我的胃口,我喜欢HTML/CSS/JavaScript分离着写 ...
- js 控制滚动条位置
1,动态表格把iframe撑开之后,滚动条自动滚到到了最右边,客户每次都要把他拉回左边看数据.很不方便,找了一下资料,js是可以操作滚动条的 方法如下: window.onload =function ...
- js控制下拉框默认选中第一个值
<td><select type="text" class="form-control" id="startOppn" n ...
- git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...
我们在实际做项目开发时,一般都需要多人协同开发,这就产生了代码管控的需求,一些版本控制的工具就应运而生了.现在常用的一种是Git,另外还有些svn等,本人感觉git工具比较好用,这篇文章也只讲述git ...
- python可抓取数据包括什么_Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓...
Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓到呢? 最好是用pyt ...
- python爬取网站的某一句话_Python实现JS解密并爬取某音漫客网站
首先打开网站 https://www.zymk.cn/1/37988.html 打开开发者工具 选择XHR标签页,没有找到什么 再查看一下这些图片的URL值 http://mhpic.xiaoming ...
最新文章
- 2050大会走向通用人工智能专场总结
- 图的单源最短路径,Floyd算法(数据结构c++)
- Web前端开发学习资料分享
- layui隐藏侧边栏_11个iPhone隐藏技能,好用但很少人知道,看完怀疑自己用的假手机...
- 小米一键上锁工具_小米首款高端全自动智能锁火热预售中,一触开启全自动时代...
- 【好文推荐】mysql创建数据库语句utf-8
- 【转载】Ubuntu终端常用的快捷键
- Lambda、函数式接口、Stream 一次性全给你
- c语言数据结构用矩阵存储图,数据结构之---C语言实现图的数组(邻接矩阵)存储表示...
- matlab slice
- @Transactional注解失效场景之——同类中方法调用,事务失效
- Faster RCNN 中的Anchor
- 科学计算机计算等比求和公式,等比数列求和公式
- 【备忘】修复SCCM客户端
- java 单体测试_单体测试指南
- 力扣周赛 第281场 Java题解
- android bootload漏洞,一加6手机的Bootloader漏洞可让攻击者控制设备
- 新课首发《物联网项目实战》
- 【渝粤教育】广东开放大学 行政组织学 形成性考核 (34)
- python量化交易策略实例_python量化交易策略入门(一):MACD的威力