Selenium笔记(8)常见的坑

本文集链接:https://www.jianshu.com/nb/25338984

用Xpath查找数据时无法直接获取节点属性

通常在我们使用xpath时,可以使用@class的方式直接获取节点的属性,如下所示:

page.xpath('//div/a/@class')

但在Selenium中不支持这种用法,只能在找到节点后,使用get_attribute(name)方法来获取属性:

page.xpath('//div/a').get_attribute('class')

同样的,Selenium同样不支持Xpath中的string()text()这类的方法,只能获取元素节点。

使用了WebDriverWait以后仍然无法找到元素

有很多时候,一个简单的元素,明明也加了显式等待,但就是找不到,代码在仔细查看过后也没有问题后,多半是以下这几种情况:

  1. 由于分辨率设置的原因,查找的元素当前是不可见的。

  2. 某些页面的元素是需要向下滚动页面才会加载的。

  3. 由于某些其他元素的短暂遮挡,所以无法定位到。

1.分辨率原因

这时候应该设置好分辨率,使当前元素能够显示到页面中。

2.需要滚动页面

有些页面为了性能的考虑,页面下方不在当前屏幕中的元素是不会加载的,只有当页面向下滚动时才会继续加载。

而selenium本身不提供向下滚动的方法,所以我们需要去用JS去滚动页面:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

网上查到的一些滚动方式在Chrome上无效。但这一句是有效的。

3.由于其他元素的遮挡

有时候因为一些弹出元素的原因,如果还使用EC.presence_of_element_located()的话,我们需要定位的元素就无法被找到,这个时候我们就应该改变我们判断元素的方法:

element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, ''))
)

使用EC.visibility_of_element_located()方法可以在等待到当前元素可见后,才获取元素。

在我们找不到元素,或者跟元素无法交互时,应该多去根据当前的情况,灵活选择显式等待的判断方式。

python爬虫基础14-selenium大全8/8-常见问题的更多相关文章

  1. Python 爬虫的工具列表大全

    Python 爬虫的工具列表大全 这个列表包含与网页抓取和数据处理的Python库.网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pyc ...

  2. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  3. python爬虫动态html selenium.webdriver

    python爬虫:利用selenium.webdriver获取渲染之后的页面代码! 1 首先要下载浏览器驱动: 常用的是chromedriver 和phantomjs chromedirver下载地址 ...

  4. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  5. python爬虫-基础入门-爬取整个网站《3》

    python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...

  6. python爬虫-基础入门-爬取整个网站《2》

    python爬虫-基础入门-爬取整个网站<2> 描述: 开场白已在<python爬虫-基础入门-爬取整个网站<1>>中描述过了,这里不在描述,只附上 python3 ...

  7. python爬虫-基础入门-爬取整个网站《1》

    python爬虫-基础入门-爬取整个网站<1> 描述: 使用环境:python2.7.15 ,开发工具:pycharm,现爬取一个网站页面(http://www.baidu.com)所有数 ...

  8. Python爬虫之设置selenium webdriver等待

    Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加 ...

  9. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  10. 小白学 Python 爬虫(14):urllib 基础使用(四)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

随机推荐

  1. dp优化1——sgq(单调队列)

    该文是对dp的提高(并非是dp入门,dp入门者请先参考其他文章) 有时候dp的复杂度也有点大...会被卡. 这几次blog大多数会讲dp优化. 回归noip2017PJT4.(题目可以自己去百度).就 ...

  2. CodeForces - 894A-QAQ(思维)

    "QAQ" is a word to denote an expression of crying. Imagine "Q" as eyes with tear ...

  3. (转)mysqldump: Got error: 1556: You can't use locks with log tables.

    mysqldump: Got error: 1556: You can't use locks with log tables. 原文:http://blog.51cto.com/oldboy/112 ...

  4. Linux下无图形界面安装Matlab

    1 下载R2015b_glnxa64.iso和破解文件Matlab+2015b+Linux64+Crack 百度网盘可以直接搜索资源.推荐一个可以多线程下载百度网盘超大文件的工具Aria2,均速1.3 ...

  5. 开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用

    项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的.可以独立 ...

  6. ThreadLocal(关于struts2的ThreadLocal,实际上Jdk1.2就有了)

    ThreadLocal是通过在不同线程中操作变量的副本,来达到线程安全的目的,是用空间资源换时间资源的方式.今天在看struts2源码的时候,发现ActionContext中,就持有一个静态的Thre ...

  7. 基于JavaMail的Java邮件发送:复杂邮件发送

    参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...

  8. 监听textarea数值变化

    监听textarea数值变化 $('#id').bind('input propertychange', function(){ //TODO });

  9. cocos2d-x入门学习篇;切换场景

    手机游戏开发最近很火爆,鉴于一直在学习c++,看起来上手就比较快了.这篇文章来自皂荚花 cocos2d-x技术,我把我的想法分享给大家. 首先来看一段代码: CCScene* HelloWorld:: ...

  10. 首次将项目从eclipse提交到服务器的SVN

    1.在Eclipse项目中,点击需要提交到svn的项目,鼠标右键,如下图: 2.鼠标右键后,我们看到Team选项,在二级菜单中点击“Share Project”,这个时候弹出“Share Projec ...