栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Selenium Python学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Selenium Python学习笔记

1.第一个脚本实现打开网页并定位元素,搜索,显示结果。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


class PythonOrgSearch(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_search_in_python_org(self):
        driver = self.driver
        driver.get("http://www.python.org")
        self.assertIn("Python", driver.title)
        elem = driver.find_element("name","q")
        elem.send_keys("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source


    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

目前能够运行。问题:大部分教程中定位元素使用的如

element = driver.find_element_by_id("passwd-id")

运行会报错如下AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'可能是By方法的问题,可以用driver.find_element("name","q")代替。

解决方法:导入By。

from selenium.webdriver.common.by import By

但是大部分教程都没有写导入By导致代码无法直接拿来运行。

现在尝试进行更多操作:点击列表,发现难以定位元素,定位后也无法点击,分别报错

Message: no such element: Unable to locate element(无法定位元素)

Message: element not interactable(无法交互)

尝试过文字定位、ID、classname等,最后使用chrome控制台中右键元素复制绝对xpath地址;无法交互是因为元素可能藏在列表、菜单中,需要先点击上一级按钮使之显现才能点击;也有可能是网页有动态效果,要加载一两秒才能展示元素,这时候可以简单地time.sleep(3)。xpath的局限就是网页稍作改变脚本就会失效。

代码:(仅作参考)

import unittest

from selenium import webdriver



class PythonOrgSearch(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_search_in_python_org(self):
        driver = self.driver
        driver.get("http:/")
        self.assertIn("新*****台", driver.title)
        
        driver.find_element("xpath", "/html/body/div--/div[1]/div[1]/a[1]").click()
        driver.find_element("xpath", "/html/body/div--/div[1]/div[1]/div[1]/a[1]").click()
        assert "No results found." not in driver.page_source
        time.sleep(20)


    """def tearDown(self):
        self.driver.close()"""

if __name__ == "__main__":
    unittest.main()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号