selenium click点击 跳转新页面转句柄

1.click点击

2.跳转到新页面,selenium获取内容还停留在第一页,需要转句柄

3.截图不完整-->因为 browser.switch_to.window 会缩小窗口

4.iframe在转句柄后,关闭新页面还有重新进入iframe

遇见一个a标签没有url的网站,然后用click点击进行跳转,跳转后又selenium还停留在第一个页面,查找原因后用到了转句柄,转句柄后我的内容页for循环不能用了,结果发现iframe在句柄关闭后没有重新定位,解决这个问题后发现内容页截图不完整然后发现browser.switch_to.window会改变窗口大小

import time
import uuid
from PIL import Image
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


uuid_list = []
uuid_list_ = []

def br():

    chrome_options = Options()
    chrome_options.add_argument("--headless")
    browser = webdriver.Chrome(options=chrome_options)
    with open(r'C:\Users\xxx\Desktop\stealth.min.js') as f:
        js = f.read()
    browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": js})
    browser.set_window_size(1200, 5000)
    browser.set_page_load_timeout(15)
    browser.set_script_timeout(15)
    total(browser)
    # content(browser)
    browser.quit()


def total(browser):
    browser.get(url='https://www.sprtc.com/index/yplxm.htm?activeName=wqzrxm&activeChildTab=')
    time.sleep(1)
    iframe1 = browser.find_element_by_xpath('//div[@class="center_list"]/iframe')
    browser.switch_to.frame(iframe1)
    browser.find_element_by_xpath('//*[@id="pane-wqzrxm"]/div[1]/div/label[2]/span').click()
    title_total=browser.find_elements_by_xpath('//*[@id="pane-wqzrxm"]/div[2]/div[3]/table/tbody/tr')
    link_total = browser.find_elements_by_xpath('//*[@id="pane-wqzrxm"]/div[2]/div[3]/table/tbody/tr/td[1]/div/span')
    for i in title_total:
        title_part=i.find_element_by_xpath('./td[1]/div/span').text
        time_part=i.find_element_by_xpath('./td[4]/div/span').text
        # link=i.find_element_by_xpath('./td[1]/div/span').click()
    png_list=[]
    for j in link_total:
        handle = browser.current_window_handle
        link_part=j.click()  # 切换内容页面
        time.sleep(0.5)
        all_handles = browser.window_handles
        new_handles = all_handles[1]  # 从所有句柄的集合中,获取最后那个,也就是最新的了
        browser.switch_to.window(new_handles)  # 然后当参数传递进来
        browser.set_window_size(1200, 5000)
        now_handles = browser.current_window_handle  # 查看现在的句柄

        # content_1=browser.find_element_by_xpath('//div[@class="content"]').text
        for k in range(6):
            browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
            time.sleep(1)
        screenshot_content = browser.find_element_by_xpath('//*[@id="iframe"]')
        uid = str(uuid.uuid4())
        # uuid_list_.append(uid)
        suid = ''.join(uid.split('-'))

        browser.get_screenshot_as_file('D:\PyCharmWorkSpace\shiyan\A\%s.png' % suid)# 对浏览器截图

        left = screenshot_content.location['x']
        top = screenshot_content.location['y']
        right = screenshot_content.location['x'] + screenshot_content.size['width']
        bottom = screenshot_content.location['y'] + screenshot_content.size['height']
        img = Image.open('D:\PyCharmWorkSpace\shiyan\A\%s.png' % suid)
        img = img.crop((left, top, right, bottom))  # 对浏览器截图进行裁剪

        img.save('D:\PyCharmWorkSpace\shiyan\B\%s.png' % suid)
        # uuid_list.append(uuid_list_)
        png_list.append('D:\PyCharmWorkSpace\shiyan\B\%s.png' % suid)
        browser.close()
        browser.switch_to.window(handle)
        iframe1 = browser.find_element_by_xpath('//div[@class="center_list"]/iframe')
        browser.switch_to.frame(iframe1)

if __name__ == '__main__':
    br()

后续再优化

### 使用 Selenium 实现网页跳转 为了使用 Selenium 实现网页跳转,可以采用多种方式。一种常见的方式是通过点击链接或按钮触发页面导航。下面是一个具体的 Python 示例,展示了如何利用 `find_element` 方法定位元素并执行点击操作以实现页面跳转。 ```python from selenium import webdriver # 初始化 WebDriver 对象,这里假设使用的是 Chrome 浏览器 driver = webdriver.Chrome() try: # 打开初始页面 driver.get('http://example.com') # 定位到目标链接并通过 click() 方法触发跳转 link_to_click = driver.find_element_by_xpath('//*[@id="1"]/h3/a[1]') link_to_click.click() finally: # 关闭浏览器 driver.quit() ``` 在这个例子中,`find_element_by_xpath()` 函数被用来找到特定的 HTML 元素,并调用其 `click()` 方法完成跳转动作[^4]。需要注意的是,在实际应用过程中可能还需要处理等待时间等问题,确保新页面完全加载后再继续后续操作。 另外,如果知道确切的目标 URL,则可以直接使用 `get()` 方法访问新的网址而无需先打开旧页再寻找链接: ```python driver.get('https://target-url.example') ``` 这种方式更为直接简单,适用于已知目的地址的情况。 对于更复杂的场景,如多标签页间的切换,可以通过获取当前所有窗口句柄列表来进行管理: ```python original_window = driver.current_window_handle # 记录原始窗口 new_windows = set(driver.window_handles) - {original_window} # 获取新开窗口集合 if new_windows: driver.switch_to.window(new_windows.pop()) # 切换至最新的弹出窗口 else: print("No new window opened.") ``` 这段代码片段可以帮助在多个浏览器标签间灵活换,从而支持更加多样化的交互需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值