一、环境部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | python+selenium+pycharm+webdriver 1、 python安装包:https: //www.python.org/getit/ 2、 PyCharm 安装包:http: //www.jetbrains.com/pycharm/download/ 3、 Selenium安装包:https: //pypi.python.org/pypi/selenium selenium安装方式一: 安装python包,选择全部组件(pip、安装过程中配置环境变量) 然后执行pip install -U selenium 联网安装Selenium; 安装方式二: 安装python包,选择全部组件(pip、安装过程中配置环境变量) 解压selenium-3.13.0.tar.gz,然后用cmd进入解压目录,使用命令 Python setup.py install 安装Selenium。 4、 webdriver配置(以chromedriver为例): Chromedriver下载地址:http: //npm.taobao.org/mirrors/chromedriver/ ***版本与浏览器版本保持一致 配置方式一: 1)把下载好的chromedriver.exe程序放置到python的安装路径下 2)在python中代码编写如下即可: driver = webdriver.Chrome() # Firefox、Ie、Edge等 配置方式二: 1)把下载好的chromedriver.exe程序放置到python项目中(其它路径也可) 2)在python中代码编写如下即可: chromePath = chromedriver.exe路径 os.environ[‘webdriver.chrome.driver’] = chromePath # gecko ie等 driver = webdriver.Chrome(executable_path=chromePath) # Firefox、Ie等 很长时间不用最好将本地的浏览器升级到最新版本 |
二、注意事项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 1、把解压的webdriver放置到python根路径 ***在pycharm中创建目录存放webdriver 2、若安装的浏览器是火狐,则需安装在默认路径,否则易报错 3、写代码时,1)需从selenium中导入webdriver eg: from selenium import webdriver 2)需定义webdriver文件路径 chrome_driver_path=os.path. join (current,’..chromedriver文件存放的路径') 3)打开chrome浏览器语句 driver = webdriver.Chrome(executable_path=chrome_driver_path) 4)输入网址 driver. get (http: //www.baidu.com) |
三、识别元素
1. 基本元素定位
1 2 3 4 5 6 7 | driver.find_element_by_id( 'id_value' ).send_keys( '最新疫情咨讯' ) #通过id定位 driver.find_element_by_name( 'name_value' ).send_keys( '最新疫情咨讯' ) #通过name定位 driver.find_element_by_class_name( 'class_name_value' ).send_keys( '最新疫情信息' ) #通过 class 元素定位 driver.find_element_by_tag_name( 'input' ).send_key( '最新疫情咨讯' ) #通过tag_name定位,<缺点:tag_name值不唯一> driver.find_element_by_link_text( '新闻' ).click() #link_text链接中的文本 <缺点:只对<a>标签生效> driver.find_element_by_partial_link_text( '新' ).click() #partial_link_text部分链接中的文本 <缺点:只对<a>标签生效> |
2.xpath定位元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | driver.find_element_by_xpath( '/html/body/div[1]/div/div[2]/form/span[1]/input' ) #绝对路径,单反斜线,遇到同层级多个元素,用下标从1开始,自顶向下写 driver.find_element_by_xpath( 'form/span[1]/input' ) #相对路径,双反斜线,遇到同层级多个元素,用下标从1开始,自底向上写 #属性定位 // 标签名[属性名=‘‘属性值’’] driver.find_element_by_xpath( '//input[@id=' 'kw' ']' ).send_keys( '新梦想' ) #多属性定位 and or driver.find_element_by_xpath( '//input[@id=' 'kw' '] and @maxlength=' '225' ']' ).send_keys( '新梦想软测' ) #支持通配符 * driver.find_element_by_xpath( '//*[@id=' 'kw' ' ]' ).send_keys( '新梦想软测' ) #模糊定位,称为部分属性值定位 #字符串以特定值开头 //a[start-with(@参数1,‘‘参数值2’’)] #以什么结尾 ends-with() #有的会报错,原因, #包含 contain() 应用的场景(1、元素信息过长 2、动态属性元素,eg:始终点击第一个订单,即动态获取第一个订单号编码) #元素文本定位 text() link_text只能用于a标签,局限性比较大,而xpath所有标签均支持 driver.find_element_by_xpath( '//a[text()=' '新闻' ']' ).click() |
3.css定位元素
《《《《《《《《同层级若遇到id用#号,遇到class用.
绝对路径
相对路径
多属性定位,只支持 and的效果
模糊定位,称为部分属性值定位
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #查询子元素 # 子元素 a>b driver.find_element_by_css_selector( '' ).send_keys( '天天开心' ) # 后代元素 a b driver.find_element_by_css_selector( '' ).send_keys( '天天向上' ) # 第一个后代元素 :first-child driver.find_element_by_css_selector( 'div#u1 a:first-child' ).click() # 最后一个后代元素 :last-child driver.find_element_by_css_selector( 'div#u1 a:laat-child' ).click() 第n个子元素 :nth-child(n) 兄弟元素 同层级的多个元素用+ 新的定位语法 需导入 by 模块 更适合用在框架里面 driver.find_element(By.ID, 'KW' ).send_keys( 'xmx' ) |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步