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 = driver.find_element_by_xpath("//form[input/@name='username']")

username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")

username = driver.find_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 selenium.webdriver.common.keys import Keys

import time

# Login 163 email

driver = webdriver.Firefox()

driver.get("")

elem_user = driver.find_element_by_name("username")

elem_user.clear

elem_user.send_keys("15201615157")

elem_pwd = driver.find_element_by_name("password")

elem_pwd.clear

elem_pwd.send_keys("******")

elem_pwd.send_keys(Keys.RETURN)

#driver.find_element_by_id("loginBtn").click()

#driver.find_element_by_id("loginBtn").submit()

time.sleep(5)

assert "baidu" in driver.title

driver.close()

driver.quit()

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

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

三. WebElement接口获取值

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

size 获取元素的尺寸

text 获取元素的文本

get_attribute(name) 获取属性值

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

page_source 返回页面源码

driver.title 返回页面标题

current_url 获取当前页面的URL

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

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

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

tag_name 返回元素的tagName

最近需要写一个爬虫,逻辑上有一个环节是取得一个页面的所有资源加载链接(html5页面)

(ps:python下的确是是有个第三方包叫Ghost.py可以取得,但是尝试后效果并不好,估计是因为Ghost.py的webkit对html5的支持并不好。)

选择用selenium,但是没找到selenium的webdriver下取得所有资源加载链接的方法。

selenium包下有一个selenium模块。查看源码时看到有个get_all_links方法。但是一直没找到这个模块的用法。

最后,求解答。谢谢大家。

方法不成的话,就自己do

it把:

all_links

=

browser.find_element_by_xpath('//a')

for

a

in

all_links:

a.getAttribute('href')


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

原文地址: http://outofmemory.cn/zaji/7419853.html

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

发表评论

登录后才能评论

评论列表(0条)

保存