【Python】Selenium切换网页的标签页的写法(全!!!) ...

打印 上一主题 下一主题

主题 1682|帖子 1682|积分 5046

在使用selenium做网站爬取测试的时间,我们经常会碰到一些须要点击的元素,才能点击到我们想要进入的页面,
于是我们就要模拟 不绝地 点点点击 鼠标的样子。
这个时间网页上就会有许多的标签页,你的浏览器网页标签栏 be like:

那么,怎么切换页面,并返回到上一页呢?

  • 打包切换页面的逻辑
  1. def switch_windows(index):
  2.     #获取当前句
  3.     current_window_handle = driver.current_window_handle
  4.     print(current_window_handle )
  5.     #获取所有句柄
  6.     all_handles = driver.window_handles
  7.     print(all_handles )
  8.    
  9.     #切换至第二个窗口
  10.     driver.switch_to.window(all_handles [index])
  11.     print(driver.title) #获取目前内容页的信息
  12.      
复制代码

  • 点击按钮跳到下一页 --> 切换到新页面 -->操作新页面内容 --> 返回上一页
  1. #点击按钮,跳转到下一个页面
  2. element=driver.find_element(By.XPATH,input_)
  3. element.click()
  4. #切换到最后一个页面-新页面
  5. switch_windows(index=-1)
  6. #读取页面的信息
  7. sleep(1)
  8. page_html=driver.page_source  
  9. page_soup=BeautifulSoup(page_html,'lxml')
  10. #返回首页
  11. switch_windows(index=0)
复制代码
除了用点击到下一页的方法,也可以模拟标签点开的方法(强推!!!好用)
原理是,网页模拟点开标签,然后把网址输入进去的过程
  1. driver.execute_script("window.open('https://www.google.com')")  # 新标签页1
  2. driver.execute_script("window.open('https://www.python.org')")  # 新标签页2
复制代码

  • 返回首页以后,我们要把后面不消的其他标签页关闭掉:
  1. # 获取所有标签页的句柄(handles)
  2. all_handles = driver.window_handles  # 返回所有标签页的ID列表
  3. homepage_handle = all_handles[0]  # 首页通常是第一个标签页
  4. # 关闭其他标签页(保留首页)
  5. for handle in all_handles:
  6.     if handle != homepage_handle:  # 如果不是首页
  7.         driver.switch_to.window(handle)  # 切换到该标签页
  8.         driver.close()  # 关闭它
  9. # 最后切换回首页
  10. driver.switch_to.window(homepage_handle)
  11. print("已关闭其他标签页,仅保留首页")
复制代码

  • 如果不确定在读取页面的时间,是不是读取到本身想要的那个网址,可以使用读取网址的方式判定:
  1. print("当前页面URL:", driver.current_url)
复制代码
也可以跟本身的目的网址做判定,如果不对的话,则切换到上一个界面
  1. current_url=    driver.current_url
  2. if current_url != target_url:
  3.      switch_windows(index=-2) #比最后一个网址再上一个页面
复制代码
这部分内容在【返回首页】的代码之前,效果如:

PS:
一些网站的HTML内部会设置一些【点击事故处置处罚属性】,
当用户点击这个元素时,会触发 onclick 中界说的 JavaScript 代码,类似下面的代码。


这种大概就要点击网页上的元素,才能获取网络响应,直接跳转到该网址上,是行不通的,大概会被发现爬虫,然后强制跳转到其他的网页页面上。
这个时间,只能用上面的方法了。
如果有更好的方法,可以解决如上的问题的话,希望大家可以提出来呀,感谢不尽!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表