Python自动化测试·Selenium操控元素的方法
你好我是安然无虞。文章目录操控元素的基本方法点击元素输入框获取元素信息获取元素的文本内容获取元素属性值获取整个元素对应的HTML获取输入框里面的文字获取元素文本内容2补充练习: QQ音乐操控元素的基本方法选择到元素之后, 我们的代码会返回元素对应的 WebElement 对象, 通过这个对象, 我们就可以 操控 元素了.操控元素通常包括:点击元素在元素中输入字符串, 通常是对输入框这样的元素获取元素包含的信息, 比如文本内容, 元素的属性点击元素点击元素 非常简单, 就是调用元素 WebElement 对象的 click 方法. 前面已经有说过.这里我们要补充讲解一点:当我们调用 WebElement 对象的 click 方法去点击元素的时候, 浏览器接收到自动化命令, 点击的是该元素的 中心点 位置.例如, 对于下面这样的一个元素:我们要点击 添加客户 这个按钮, 既可以点击 右边对应的绿色框子中的button元素, 也可以点击红色框子中的span元素.因为这两个元素的中心点都是button内部, 所以都是有效的点击区域.输入框输入字符串 也非常简单, 就是调用元素 WebElement 对象的 send_keys()方法.如果我们要把 输入框中已经有的内容清除掉, 可以使用 WebElement 对象的 clear()方法.请大家点击打开这个网址并且按F12观察HTML的内容我们要写一个自动化程序要求在输入框中填入姓名安然无虞而且要做到输入框中已经有的提示字符需要先清除掉代码如下:elementwd.find_element(By.ID,input1)element.clear()# 清除掉输入框中已有的字符串element.send_keys(安然无虞)获取元素信息获取元素的文本内容我们已经知道, 通过 WebElement 对象的 text 属性, 可以获取元素展示在界面上的文本内容.比如:elementwd.find_element(By.ID,animal)print(element.text)获取元素属性值通过 WebElement 对象的 get_attribute 方法来获取元素的属性值.比如要获取元素属性class的值, 就可以使用 element.get_attribute(‘class’),如下:elementwd.find_element(By.ID,input_name)print(element.get_attribute(class))执行完自动化代码, 如果想关闭浏览器窗口, 可以调用 WebDriver 对象的quit()方法, 像这样 wd.quit().获取整个元素对应的HTML要获取整个元素对应的HTML文本内容, 可以使用 element.get_attribute(‘outerHTML’)如果只是想获取某个元素 内部 的HTML文本内容, 可以使用 element.get_attribute(‘innerHTML’)获取输入框里面的文字对于input输入框的元素, 要获取里面的输入文本, 用text属性是不行的, 这时可以使用:element.get_attribute(‘value’)比如:elementwd.find_element(By.ID,input1)print(element.get_attribute(value))# 获取输入框里的文本获取元素文本内容2通过 WebElement 对象的 text属性, 可以获取元素 展示在界面上的 文本内容.但是有时候, 元素的文本内容没有展示在界面上, 或者没有完全展示在界面上. 这时, 用 WebElement对象的text属性 来获取文本, 就会有问题.遇到上面这种情况时, 可以尝试使用 element.get_attribute(‘innerText’), 或者 element.get_attribute(‘textContent’)使用 innerText 和 textContent 的区别是, 前者只显示元素可见文本内容, 后者显示所有内容 (包括display属性为none的部分)具体可以参考这里注意: 了解前端开发的同学可以知晓一下:get_attribute 调用本质上就是调用 HTMLElement 对象的属性比如:element.get_attribute(‘value’)等价于js里面的 element.valueelement.get_attribute(‘innerText’)等价于js里面的 element.innerText补充练习: QQ音乐打开qq音乐 https://y.qq.com/n/ryqq/toplist/27找出其中排名上升的歌曲序号右边有上升箭头图标的和演唱者打印出来打印格式如下孤独 G.E.M. 邓紫棋 Lovesick Girls BLACKPINK 落幕人 任然 幸存者 林俊杰 刁钻 任然注意界面有时会弹出广告框可以先手动关闭掉防止其影响自动化爬取信息参考答案:fromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy wdwebdriver.Chrome()wd.implicitly_wait(5)wd.get(https://y.qq.com/n/ryqq/toplist/27)elements(wd.find_element(By.CLASS_NAME,songlist__list)).find_elements(By.TAG_NAME,li)#所有歌曲forelementinelements:rank(element.find_element(By.CLASS_NAME,songlist__rank)).find_element(By.TAG_NAME,i)# 这个判断非常好, 注意使用ifrank.get_attribute(class)icon_rank_up:songelement.find_element(By.CLASS_NAME,songlist__songname_txt)#上升 歌曲名nameelement.find_element(By.CLASS_NAME,songlist__artist)#上升 歌手名print(f{song.text:20}{name.text})遇见安然遇见你不负代码不负卿。谢谢老铁的时间咱们下篇再见