浏览器抓取网页( Selenium处理多窗口场景多个窗口识别与切换(图))

优采云 发布时间: 2021-10-27 22:09

  浏览器抓取网页(

Selenium处理多窗口场景多个窗口识别与切换(图))

  网页框架及多窗口、多浏览器、上传弹窗处理

  Selenium 处理多窗口场景下的多窗口识别和切换

  单击某些链接将重新打开一个窗口。在这种情况下,如果要在新页面上进行操作,则必须先切换窗口。获取的窗口的唯一标识由一个句柄表示,因此您只需切换句柄即可在多个页面之间灵活操作。

  处理流程:

  1.先获取当前窗口的句柄

  driver.current_window_handle

  2.再次获取所有窗口句柄

  driver.window_handles

  3. 判断是否是你要操作的窗口,如果是,可以对该窗口进行操作,如果不是,则跳转到另一个窗口,对另一个窗口进行操作

  driver.switch_to_window

  Selenium处理帧多帧识别与切换

  做web自动化的时候,如果找不到某个元素,可能是因为该元素在iframe中

  框架是 HTML 中的框架。HTML中所谓的frame,是指在同一个浏览器中可以显示多个页面

  基于HTML的框架可以分为垂直框架和水平框架(cols,rows)

  车架分类

  frame标签收录三种类型:frameset、frame、iframe

  框架集和普通标签一样,不会影响正常定位。您可以使用任何 index、id、name、webelement 方法来定位框架

  Frame 和 iframe 对于 selenium 定位是相同的。Selenium 有一组方法来操作框架:

  driver.switch_to.frame() # 根据元素id或者index切换frame

driver.switch_to.default_content() # 切换到默认frame

driver.switch_to.parent_frame() # 切换到父级frame

  未嵌套的 iframe

  driver.switch_to_frame("frame的id")

driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)

  嵌套 iframe

  这时候先进入iframe的父节点,再进入子节点,然后进行操作

  driver.switch_to.frame("父节点")

driver.switch_to.frame("子节点")

  多浏览器处理

  通过传递不同的参数来处理不同的浏览器,比如将浏览器类型作为参数传递给os.getenv方法,然后根据传递的参数判断选择不同的浏览器

  def setup(self):

browser = os.getenv("browser")

if browser == 'firefox':

self.driver = webdriver.Firefox()

elif browser == 'chrome'

self.driver = webdriver.Chrome()

  文件上传处理输入标签

  可以直接使用send_keys(文件地址)上传文件:

  el = driver.find_element_by_id("上传按钮id")

el.send_keys("文件路径+文件名")

  *敏*感*词*处理机制

  在页面上操作时,会遇到一些由JavaScript生成的alert、confirm、提示弹窗。这时候可以使用switch_to.alert()方法来定位。然后使用text/accept/dismiss/send_keys等方法进行操作。

  switch_to.alert() # 获取当前页面上的警告框

text() # 返回alert/confirm/prompt中的文字信息

accept() # 接受现有警告框

dissmiss() # 解散现有警告框

send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框

  最简单粗暴的判断弹窗是 JavaScript 生成的警报还是 div 组件的方法:无法在浏览器的开发者工具中定位警报

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线