python爬虫简单问题,HTML对象的定位问题

python爬虫简单问题,HTML对象的定位问题,第1张

这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:

find_element_by_id

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

        下面是查找多个元素(这些方法将返回一个列表):

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

除了上面给出的公共方法,这里也有两个在页面对象定位器有用的私有方法。这两个私有方法是find_element和find_elements。

常用方法是通过xpath相对路径进行定位,同时CSS也是比较好的方法。举例:

[html] view plain copy

<html>

<body>

<form id="loginForm">

<input name="username" type="text" />

<input name="password" type="password" />

<input name="continue" type="submit" value="Login" />

<input name="continue" type="button" value="Clear" />

</form>

</body>

<html>

        定位username元素的方法如下:

[python] view plain copy

username = driverfind_element_by_xpath("//form[input/@name='username']")

username = driverfind_element_by_xpath("//form[@id='loginForm']/input[1]")

username = driverfind_element_by_xpath("//input[@name='username']")

        [1] 第一个form元素通过一个input子元素,name属性和值为username实现

        [2] 通过id=loginForm值的form元素找到第一个input子元素

        [3] 属性名为name且值为username的第一个input元素

二 *** 作元素方法

在讲述完定位对象(locate elements)之后我们需要对该已定位对象进行 *** 作,通常所有的 *** 作与页面交互都将通过WebElement接口,常见的 *** 作元素方法如下:

clear 清除元素的内容

send_keys 模拟按键输入

click 点击元素

submit 提交表单

举例自动访问FireFox浏览器自动登录163邮箱。

[python] view plain copy

from selenium import webdriver

from seleniumwebdrivercommonkeys import Keys

import time

# Login 163 email

driver = webdriverFirefox()

driverget("")

elem_user = driverfind_element_by_name("username")

elem_userclear

elem_usersend_keys("15201615157")

elem_pwd = driverfind_element_by_name("password")

elem_pwdclear

elem_pwdsend_keys("")

elem_pwdsend_keys(KeysRETURN)

#driverfind_element_by_id("loginBtn")click()

#driverfind_element_by_id("loginBtn")submit()

timesleep(5)

assert "baidu" in drivertitle

driverclose()

driverquit()

        首先通过name定位用户名和密码,再调用方法clear()清除输入框默认内容,如“请输入密码”等提示,通过send_keys("")输入正确的用户名和密码,最后通过click()点击登录按钮或send_keys(KeysRETURN)相当于回车登录,submit()提交表单。

        PS:如果需要输入中文,防止编码错误使用send_keys(u"中文用户名")。

三 WebElement接口获取值

通过WebElement接口可以获取常用的值,这些值同样非常重要。

size 获取元素的尺寸

text 获取元素的文本

get_attribute(name) 获取属性值

location 获取元素坐标,先找到要获取的元素,再调用该方法

page_source 返回页面源码

drivertitle 返回页面标题

current_url 获取当前页面的URL

is_displayed() 设置该元素是否可见

is_enabled() 判断元素是否被使用

is_selected() 判断元素是否被选中

tag_name 返回元素的tagName

如果楼主把护照元素的源码显示出来更好解决问题。思路大概是,xpath=//li/span[@text='护照'],如果匹配多个结果时,后追加[第n个];或者继续追加父节点和它属性信息。

Python的爬虫库其实很多,像常见的urllib,requests,bs4,lxml等,初始入门爬虫的话,可以学习一下requests和bs4(BeautifulSoup)这2个库,比较简单,也易学习,requests用于请求页面,BeautifulSoup用于解析页面,下面我以这2个库为基础,简单介绍一下Python如何爬取网页静态数据和网页动态数据,实验环境win10+python36+pycharm50,主要内容如下:

Python爬取网页静态数据

这个就很简单,直接根据网址请求页面就行,这里以爬取糗事百科上的内容为例:

1这里假设我们要爬取的文本内容如下,主要包括昵称、内容、好笑数和评论数这4个字段:

打开网页源码,对应网页结构如下,很简单,所有字段内容都可以直接找到:

2针对以上网页结构,我们就可以编写相关代码来爬取网页数据了,很简单,先根据url地址,利用requests请求页面,然后再利用BeautifulSoup解析数据(根据标签和属性定位)就行,如下:

程序运行截图如下,已经成功爬取到数据:

Python爬取网页动态数据

很多种情况下,网页数据都是动态加载的,直接爬取网页是提取不到任何数据的,这时就需要抓包分析,找到动态加载的数据,一般情况下就是一个json文件(当然,也可能是其他类型的文件,像xml等),然后请求解析这个json文件,就能获取到我们需要的数据,这里以爬取人人贷上面的散标数据为例:

1这里假设我们爬取的数据如下,主要包括年利率,借款标题,期限,金额,进度这5个字段:

2按F12调出开发者工具,依次点击“Network”->“XHR”,F5刷新页面,就可以找到动态加载的json文件,具体信息如下:

3接着,针对以上抓包分析,我们就可以编写相关代码来爬取数据了,基本思路和上面的静态网页差不多,先利用requests请求json,然后再利用python自带的json包解析数据就行,如下:

程序运行截图如下,已经成功获取到数据:

至此,我们就完成了利用python来爬取网页数据。总的来说,整个过程很简单,requests和BeautifulSoup对于初学者来说,非常容易学习,也易掌握,可以学习使用一下,后期熟悉后,可以学习一下scrapy爬虫框架,可以明显提高开发效率,非常不错,当然,网页中要是有加密、验证码等,这个就需要自己好好琢磨,研究对策了,网上也有相关教程和资料,感兴趣的话,可以搜一下,希望以上分享的内容能对你上有所帮助吧,也欢迎大家评论、留言。

python对于onclick取值的怎么定位

从GitHub中整理出的15个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。

Django: Python Web应用开发框架

Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

Diesel:基于Greenlet的事件I/O框架

Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。

python的用途:

python也是一门程序语言。能写各种各样的程序。

优点:

1支持OOP编程从根本

上讲Python仍是一种面向对象的语言,支持多态、继承等高级概念,在Python里使用OOP十分容易没有C++、Java那样复杂,但不必做Python下OOp高手,够用即可。

2免费Python的使用是完全免费的,您可以从网络上免费下载、安装使用,Python上的其他程序包,也可下载安装使用。Python的免费的同时又有很多的的社区对用户的提问提出快速的技术支持,学习和使用Python技术不再是一个人在战斗!

3可移植性Python的实现是用ansic编写的,可以运行在目前所有主流平台上,手机、pad上均可运行Python程序,其下的程序包也具有可移植性。

4功能强大从特性的观点上看,Python是一个混合体,他丰富的工具集使得他介于传统的脚本语言和系统语言之间。

设计定位

Python的设计哲学是"优雅"、"明确"、"简单"。因此,Perl语言中"总是有多种方法来做同一件事"的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是"用一种方法,最好是只有一种方法来做一件事"。

在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行importthis可以获得完整的列表。

Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools,itertools)提供了Haskell和StandardML中久经考验的函数式程序设计工具。

虽然Python可能被粗略地分类为"脚本语言"(scriptlanguage),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是"脚本语言"泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。

Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。

因此,很多人还把Python作为一种"胶水语言"(gluelanguage)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如GoogleEngine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。

您可以尝试使用elementget_attribute('value')来获取该元素的值,因为可能该元素的文本值并非可见文本,而是元素的值属性。代码示例:

如果仍然无法获取到值,可以检查一下该元素是否在页面加载完成后出现,或者是否有iframe或frame嵌套,需要先切换到相应的iframe或frame才能找到该元素。

你可以在开发者选项中打开指针位置,这样就很容易去获取界面上各个图标的具体位置了。建议是先获取手机分辨率,然后根据分辨率去计算要点击的位置。

点击 *** 作driver有click()方法,如果没有className或者resource-id,使用swipe方法,参考如下:

##获取手机屏幕分辨率

x = selfdriverget_window_size()['width']

y = selfdriverget_window_size()['height']

x = int(x01)

y = int(y01)

selfdriverswipe(x, y, x, y,1)

#这里的xy就是你UI界面上图标对应的坐标,时间非常短,1毫秒,模拟点击了。

如果别人有更好的方法,你就用别人的,仅供参考。

当然tap也可以,doc如下:

"""Taps on an particular place with up to five fingers, holding

for a

certain time

:Args:

- positions - an array of tuples representing the x/y

coordinates of

the fingers to tap Length can be up to five

- duration - (optional) length of time to tap, in ms

:Usage:

drivertap([(100, 20), (100, 60), (100, 100)], 500)

"""

以上就是关于python爬虫简单问题,HTML对象的定位问题全部的内容,包括:python爬虫简单问题,HTML对象的定位问题、Python selenium 自动化定位,这种下拉什么定位到“护照”、Python爬虫如何写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9744496.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存