记一次python + selenium小项目出现的问题与解决办法

如何接入代理

def crawl_xdaili(self):#代理  可不用  需要时 解除注释
"""
获取讯代理
:return: 代理
"""
url = '寻代理的api接口 自己去讯代理官网'
r = requests.get(url)
if r:
result = json.loads(r.text)
proxies = result.get('RESULT')
for proxy in proxies:
self.proxies = {
'http':'http://' + proxy.get('ip') + ":"+ proxy.get('port')
}
print(proxies) options.add_argument("--proxy-server=%s"%ip)#设置IP代理

获取信息方式

尽量使用第一次找到一个大的信息所在的标签通过xpath+for循环提取信息

   def info_url(self):#获取页面中的url等信息
self.driver.current_window_handle
# 先定位,查看是否加载元素
WebDriverWait(self.driver, 1000).until(
EC.presence_of_element_located(
(By.XPATH, "//tr[@onmouseout='this.className=rowClass']")))
infos = self.driver.find_elements_by_xpath("//tr[@onmouseout='this.className=rowClass']")#获取标题
some_info=[]
self.urls = []
self.titles = []
for info in infos:#选择性获取你需要的信息
title = info.find_element_by_xpath('.//a/span').get_attribute('title') #标题
url = info.find_element_by_xpath('.//a').get_attribute('href')#链接
address = info.find_element_by_xpath('./td[2]').text
ways = info.find_element_by_xpath('./td[4]').text#方式
time1 = info.find_element_by_xpath('./td[5]').text#日期
time2 = info.find_element_by_xpath('./td[6]').text
self.urls.append(url)
self.titles.append(title)

如何重新打开一个页面

js = 'window.open("{}");'.format(url)
self.driver.execute_script(js)

如何切换页面句柄

handles = self.driver.window_handles
for handle in handles:
if handle != self.driver.current_window_handle:
self.driver.switch_to.window(handle) self.driver.close()

如何截图

self.driver.switch_to.window(handle)
window_height = self.driver.get_window_size()['height']
page_width = self.driver.execute_script('return document.documentElement.scrollWidth') # 页面宽度
page_height = self.driver.execute_script('return document.documentElement.scrollHeight') # 页面高度
self.driver.set_window_size(page_width, page_height) # 窗口大小调整
u = 'F:\\pycharm_pracise\\land\\Picture\\%s.png' % self.titles[t]#改到你自己创建的文件夹
self.driver.get_screenshot_as_file(u)
#self.driver.save_screenshot('%s.png'%self.titles[t]) # 截屏
print('已截图......第%d张'%t)

如何解决存在javascript:void的标签的查找或者点击

aElements = self.driver.find_elements_by_tag_name("a")
time.sleep(2)
names = []
for name in aElements:
if (name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href")):
names.append(name) #点击self.driver.execute_script('arguments[0].click();',names[-2])
写代码之前构思好流畅的思路以及流程

流程:
打开页面-》输入时间-》获取一共多少页和页面中url-》解析整页的页面-》翻页
* 循环 *
* 循环 *
********************************

记一次python + selenium小项目出现的问题与解决办法的更多相关文章

  1. C#项目间循环引用的解决办法,有图有真相

    C#项目间循环引用的解决办法,有图有真相 程序间的互相调用接口,c#禁止互相引用,海宏软件,20160315 /// c#禁止互相引用,如果项目[订单]中有一个orderEdit单元,要在项目[进销存 ...

  2. Python打包成exe,文件太大问题解决办法

    Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...

  3. 学习笔记之Python人机交互小项目一:名字管理系统

    2020是一个不平凡的一年,但即使挫折不断,我们每学期的课程实训也没有受到影响,仍旧如期实施.与往年不同的是,今年的实训老师是学校邀请的公司在职人员来给我们实训.今年实训的内容是Python语言,下面 ...

  4. 学习笔记之Python人机交互小项目二:名片管理系统

    继上次利用列表相关知识做了简单的人机交互的小项目名字管理系统后,当学习到字典时,老师又让我们结合列表和字典的知识,结合一起做一个名片管理系统,这里分享给在学习Python的伙伴! 1.不使用函数 1 ...

  5. 【转】【selenium+Python WebDriver】之元素定位不到解决办法

    感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...

  6. python+selenium自动化测试,浏览器最大化报错解决方法

    此处以谷歌浏览器为例 [问题1]缺少chrome驱动,webdriver调用谷歌浏览器的时候就报错了,如下图: [原因分析]缺少谷歌驱动程序 [解决办法] 1.查看本地安装chrome浏览器版本 2. ...

  7. vs2017下发现解决python运行出现‘No module named "XXX""的解决办法

    对于使用vs2017开发python程序无疑发现,在解决方案资源管理器中设置把两个xxx.py,yyy.py文件都设置为启动文件,然后分别在vs2017这个IDE下运行这个两个文件在项目工程中运行,发 ...

  8. Python编程的10个经典错误及解决办法

    接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Python3十大经典错误及 ...

  9. eclipse导入web项目之后项目中出现小红叉解决办法

    项目中有小红叉我遇到的最常见的情况: 1.项目代码本身有问题.(这个就不说了,解决错误就OK) 2.项目中的jar包丢失.(有时候eclipse打开时会出现jar包丢失的情况,关闭eclipse重新打 ...

随机推荐

  1. C语言学习之我见-strcmp()字符串比较函数

    strcmp()函数,用于两个字符串的比较. (1)函数原型 int strcmp(const char *_Str1,const char *_Str2); (2)头文件 string.h (3)功 ...

  2. C++ 炼气期之算术运算符

    1. 前言 编写程序时,数据确定后,就需要为数据提供相应的处理逻辑(方案或算法).所谓逻辑有 2 种存在形态: 抽象形态:存在于意识形态,强调思考过程,与具体的编程语言无关. 具体形态:通过代码来实现 ...

  3. 分享自己平时使用的socket多客户端通信的代码技术点和软件使用

    前言 说到linux下多进程通信,有好几种,之前也在喵哥的公众号回复过,这里再拿出来,重新写一遍:多进程通信有管道,而管道分为匿名和命名管道 ,后者比前者优势在于可以进行无亲缘进程通信:此外信号也是进 ...

  4. 数据库 OLAP、OLTP是什么?相同和不同?适用场景

    一.OLTP和OLAP是什么,二者比较 人类世界遵从基本的物理规律,数据世界里,关于数据的操作处理,也大体分为OLTP和OLAP两类. OLTP on-line transaction process ...

  5. 不要让Microsoft edge 打开IE浏览器的设置(兼容性问题)

    1打开Microsoft edge 2 打开设置 3 搜索栏搜索IE,打开即可

  6. Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现

    我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...

  7. 自己动手实现 HashMap(Python字典),彻底系统的学习哈希表(上篇)——不看血亏!!!

    HashMap(Python字典)设计原理与实现(上篇)--哈希表的原理 在此前的四篇长文当中我们已经实现了我们自己的ArrayList和LinkedList,并且分析了ArrayList和Linke ...

  8. Tomcat深入浅出——Filter与Listener(五)

    一.Filter过滤器 1.1 Filter过滤器的使用 这是过滤器接口的方法 public interface Filter { default void init(FilterConfig fil ...

  9. SpringBoot快速整合通用Mapper

    前言 后端业务开发,每个表都要用到单表的增删改查等通用方法,而配置了通用Mapper可以极大的方便使用Mybatis单表的增删改查操作. 通用mapper配置 1.添加maven: <depen ...

  10. Oracle归档日志暴增排查优化

    1.ORACLE归档日志介绍 归档日志暴增是oracle比较常见的问题,遇到归档日志暴增,我们该如何排查: 归档日志暴增一般都是应用或者人为引起的 理解归档日志存储的是什么 如何排查归档日志暴增原因 ...