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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫简单问题,HTML对象的定位问题?相关的知识,希望对你有一定的参考价值。

第一张和第二张是一个网站,定位到登陆页面,我定位语句为:brower.find_element_by_class_name("input input-auto input-underline username").send_keys("XXXXX")为什么定位不到位置?提示错误?(注意:第一图上面写着type="text/javascript")我觉得和这个有关系。第二个问题:定位的id一直变化的网站,怎么定位?

参考技术A

这里有各种策略用于定位网页中的元素(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()提交表单。是什么意思?

参考技术B 可以使用ip代理软件实现
推荐618IP代理软件,安卓手机、苹果手机都可以使用,一键切换就可以,操作简单

以上是关于python爬虫简单问题,HTML对象的定位问题?的主要内容,如果未能解决你的问题,请参考以下文章

Python2 爬虫初学笔记

Python+Selenium学习--简单对象定位

使用python做最简单的爬虫

python-爬虫-bs4-BeautifulSoup

Python 爬虫学习3 -简单抓取小说网信息

[python爬虫] Selenium常见元素定位方法和操作的学习介绍