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实现右键菜单和另存为操作...相关推荐

  1. html滚动条怎么置顶,js控制滚动条到最底端(置底)和最顶端(置顶)

    滚动条样式: body { SCROLLBAR-FACE-COLOR: #f892cc; SCROLLBAR-HIGHLIGHT-COLOR: #f256c6; SCROLLBAR-SHADOW-CO ...

  2. JS控制滚动条的位置 JS控制TextArea滚动条自动滚动到最下部

    S控制滚动条的位置 window.scrollTo(x,y); 竖向滚动条置顶 window.scrollTo(0,0); 竖向滚动条置底 window.scrollTo(0,document.bod ...

  3. python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表

    全栈工程师开发手册 (作者:栾鹏) python教程全解 其中使用到了urllib.BeautifulSoup爬虫和结巴中文分词的相关知识. 调试环境python3.6 # 根据连接爬取中文网站,获取 ...

  4. 《selenium2 python 自动化测试实战》(15)——调用js控制滚动条等操作

    看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox( ...

  5. 用JS控制下拉菜单效果

    今天,突然想复习下之前学习做导航菜单的一些知识.之后觉得下拉菜单非常好玩儿,于是自己试着用JS调出了效果.网上有众多方法,但是感觉不是很对我的胃口,我喜欢HTML/CSS/JavaScript分离着写 ...

  6. js 控制滚动条位置

    1,动态表格把iframe撑开之后,滚动条自动滚到到了最右边,客户每次都要把他拉回左边看数据.很不方便,找了一下资料,js是可以操作滚动条的 方法如下: window.onload =function ...

  7. js控制下拉框默认选中第一个值

    <td><select type="text" class="form-control" id="startOppn" n ...

  8. git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...

    我们在实际做项目开发时,一般都需要多人协同开发,这就产生了代码管控的需求,一些版本控制的工具就应运而生了.现在常用的一种是Git,另外还有些svn等,本人感觉git工具比较好用,这篇文章也只讲述git ...

  9. python可抓取数据包括什么_Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓...

    Python对JS型数据抓取有什么特别好的方法吗,pythonjs型抓取,想写一个爬虫,但是需要抓 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓到呢? 最好是用pyt ...

  10. python爬取网站的某一句话_Python实现JS解密并爬取某音漫客网站

    首先打开网站 https://www.zymk.cn/1/37988.html 打开开发者工具 选择XHR标签页,没有找到什么 再查看一下这些图片的URL值 http://mhpic.xiaoming ...

最新文章

  1. 2050大会走向通用人工智能专场总结
  2. 图的单源最短路径,Floyd算法(数据结构c++)
  3. Web前端开发学习资料分享
  4. layui隐藏侧边栏_11个iPhone隐藏技能,好用但很少人知道,看完怀疑自己用的假手机...
  5. 小米一键上锁工具_小米首款高端全自动智能锁火热预售中,一触开启全自动时代...
  6. 【好文推荐】mysql创建数据库语句utf-8
  7. 【转载】Ubuntu终端常用的快捷键
  8. Lambda、函数式接口、Stream 一次性全给你
  9. c语言数据结构用矩阵存储图,数据结构之---C语言实现图的数组(邻接矩阵)存储表示...
  10. matlab slice
  11. @Transactional注解失效场景之——同类中方法调用,事务失效
  12. Faster RCNN 中的Anchor
  13. 科学计算机计算等比求和公式,等比数列求和公式
  14. 【备忘】修复SCCM客户端
  15. java 单体测试_单体测试指南
  16. 力扣周赛 第281场 Java题解
  17. android bootload漏洞,一加6手机的Bootloader漏洞可让攻击者控制设备
  18. 新课首发《物联网项目实战》
  19. 【渝粤教育】广东开放大学 行政组织学 形成性考核 (34)
  20. python量化交易策略实例_python量化交易策略入门(一):MACD的威力

热门文章

  1. [Java] Maven 建立 Spring MVC 工程
  2. UILongPressGestureRecognizer
  3. PHP截取中文字符串的方法
  4. webrtc项目编译报错(image not found)
  5. 【源码阅读】Java集合之一 - ArrayList源码深度解读
  6. JAVAFX-1 开发应用
  7. 如何将自己在github写的android library开源,让大家依赖使用
  8. phpcms V9 栏目管理
  9. 从一句SQL得出的启示
  10. ARPG游戏打击感相关的技术简单总结