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

第一张和第二张是一个网站,定位到登陆页面,我定位语句为:brower.find_element_by_class_name("inputinput-autoinput-u... 第一张和第二张是一个网站,定位到登陆页面,我定位语句为:brower.find_element_by_class_name("input input-auto input-underline username").send_keys("XXXXX")为什么定位不到位置?提示错误?(注意:第一图上面写着type="text/javascript")我觉得和这个有关系。第二个问题:定位的id一直变化的网站,怎么定位? 展开
 我来答
从空去听8
2017-12-31 · TA获得超过7442个赞
知道大有可为答主
回答量:6907
采纳率:93%
帮助的人:5745万
展开全部

这里有各种策略用于定位网页中的元素(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

追问
submit()提交表单。是什么意思?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-11-13
展开全部
可以使用ip代理软件实现
推荐618IP代理软件,安卓手机、苹果手机都可以使用,一键切换就可以,操作简单
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式