鱼C论坛

 找回密码
 立即注册
查看: 1178|回复: 8

[已解决]兄弟们你们用selenium写网页自动化的时候 弹出新窗口怎么解决的呀

[复制链接]
发表于 2020-8-10 10:31:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
兄弟们你们用selenium写网页自动化的时候 弹出新窗口怎么解决的呀

就是无法定位新窗口的 输入输出呀.
最佳答案
2020-8-10 14:37:46
driver.execute_script('window.open()')    # 开启一个选项卡
windows=driver.window_handles           # 获得当前浏览器所有窗口
driver.switch_to.window(windows[0])     # 切换到最左侧窗口
driver.switch_to.window(windows[-1])    # 切换到最新打开窗口(注:也就是最右侧窗口)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 10:34:09 | 显示全部楼层
请发代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 10:39:52 From FishC Mobile | 显示全部楼层
新窗口也是get后得到的,赋值给变量就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 10:45:40 | 显示全部楼层
suchocolate 发表于 2020-8-10 10:39
新窗口也是get后得到的,赋值给变量就好了。

发代码看看不就行了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-10 10:54:11 | 显示全部楼层
陈尚涵 发表于 2020-8-10 10:45
发代码看看不就行了吗

当然可以 谢谢指点
#!/usr/bin/env python
# coding:utf-8

import requests
import time
import json
import pyautogui
from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
class zhixing(object):
    def dianji(leixing,zhi):
        print(leixing,zhi)            
        # 定位到元素
        #double_click = browser.find_element_by_id('xx')
        if "id" in leixing:
            driver.find_element_by_id(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "name" in leixing:
            driver.find_element_by_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "xpath" in leixing:
            driver.find_element_by_xpath(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "class" in leixing:
            driver.find_element_by_class_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "link" in leixing:
            driver.find_element_by_link_text(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "tag" in leixing:
            driver.find_element_by_tag_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "css" in leixing:
            driver.find_element_by_css_selector(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "wenzi" in leixing:
            driver.find_element_by_link_text(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "jpg" in leixing:
            jpgxy=pyautogui.locateCenterOnScreen(zhi)
            pyautogui.doubleClick(x=jpgxy[0]-1,y=jpgxy[1],button="left")
            print("图片点击完毕")
        else:
            print('请检查,',leixing,zhi,'内容是否正确')
        #执行反馈
        return
    def shuru(leixing,zhi,neirong):
        print(leixing,zhi)
        if "id" in leixing:
            driver.find_element_by_id(zhi).send_keys(neirong)
            print("id输入完毕")
        elif "name" in leixing:
            driver.find_element_by_name(zhi).send_keys(neirong)
            print("name输入完毕")
        elif 'xpath' in leixing:
            driver.find_element_by_xpath(zhi).send_keys(neirong)
            print("xpath输入完毕")
        elif 'input' in leixing:
            driver.find_element_by_tag_name(leixing).send_keys(zhi)
            print("xpath输入完毕")
        else:
            print('请检查,',shuru,'内容是否正确')
        #执行反馈
        return

    def qqqiyehao(www,username,password):
        driver.get(www)#打开网址
        try:
            with open('anquan.txt', 'r', encoding='utf8') as f:
                listCookies = json.loads(f.read())
            print('%%%%%%%%%%%%%%%%%', listCookies)
            for cookie in listCookies:
                driver.add_cookie(cookie)
                driver.get(www)
                # 读取完cookie刷新页面
                driver.refresh()
                print("调用cookie成功,尝试登录,直至登录成功")
        except:
            driverok=(driver.page_source)#获取源码
            print(driverok)
            if u"公众平台帐号登录" in driverok:
                zhixing.dianji("xpath",'//*[@id="header"]/div[2]/div/div/div[2]/a')
                # 输入账号密码
                zhixing.shuru("name","account",username)
                zhixing.shuru("name","password",password)
                # 模拟点击登录
                zhixing.dianji("xpath",'//*[@id="header"]/div[2]/div/div/div[1]/form/div[4]/a')
                # 等待3秒
                time.sleep(20)
                #获取网站cookie
                dictCookies = driver.get_cookies()
                jsonCookies = json.dumps(dictCookies)
                # print(jsonCookies)
                with open('anquan.txt', 'w') as f:
                    f.write(jsonCookies)
                    print("保存cookie成功")
                    # 将cookies保存
        else:
            print('登录不成功')
        link = zhixing.dianji("xpath","/html/body/div[2]/div/div[2]/div/div/div[3]/div[2]/div[3]/div[2]/div/div[1]")
        time.sleep(3)
#执行到这里出问题了 因为弹出了新窗口
        all_hand = driver.window_handles
        print(all_hand)
        driver.switch_to_window(all_hand[-1])
        #driver.quit()
        return
            #执行反馈
            
if __name__ == '__main__':
    desired_capabilities = DesiredCapabilities.FIREFOX
    desired_capabilities["pageLoadStrategy"] = "eager"#normal 正常 eager 等解析完成 none当html下载完成
    driver = webdriver.Firefox(executable_path='geckodriver.exe')
    www=("https://mp.weixin.qq.com/")
    username=("*******")
    password=("*******")

    zhixing.qqqiyehao(www,username,password)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-10 10:55:02 | 显示全部楼层

谢谢指教  我的代码是这样的
#!/usr/bin/env python
# coding:utf-8

import requests
import time
import json
import pyautogui
from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
class zhixing(object):
    def dianji(leixing,zhi):
        print(leixing,zhi)            
        # 定位到元素
        #double_click = browser.find_element_by_id('xx')
        if "id" in leixing:
            driver.find_element_by_id(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "name" in leixing:
            driver.find_element_by_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "xpath" in leixing:
            driver.find_element_by_xpath(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "class" in leixing:
            driver.find_element_by_class_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "link" in leixing:
            driver.find_element_by_link_text(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "tag" in leixing:
            driver.find_element_by_tag_name(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "css" in leixing:
            driver.find_element_by_css_selector(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "wenzi" in leixing:
            driver.find_element_by_link_text(zhi).click()
            print(leixing,zhi,"点击完毕")
        elif "jpg" in leixing:
            jpgxy=pyautogui.locateCenterOnScreen(zhi)
            pyautogui.doubleClick(x=jpgxy[0]-1,y=jpgxy[1],button="left")
            print("图片点击完毕")
        else:
            print('请检查,',leixing,zhi,'内容是否正确')
        #执行反馈
        return
    def shuru(leixing,zhi,neirong):
        print(leixing,zhi)
        if "id" in leixing:
            driver.find_element_by_id(zhi).send_keys(neirong)
            print("id输入完毕")
        elif "name" in leixing:
            driver.find_element_by_name(zhi).send_keys(neirong)
            print("name输入完毕")
        elif 'xpath' in leixing:
            driver.find_element_by_xpath(zhi).send_keys(neirong)
            print("xpath输入完毕")
        elif 'input' in leixing:
            driver.find_element_by_tag_name(leixing).send_keys(zhi)
            print("xpath输入完毕")
        else:
            print('请检查,',shuru,'内容是否正确')
        #执行反馈
        return

    def qqqiyehao(www,username,password):
        driver.get(www)#打开网址
        try:
            with open('anquan.txt', 'r', encoding='utf8') as f:
                listCookies = json.loads(f.read())
            print('%%%%%%%%%%%%%%%%%', listCookies)
            for cookie in listCookies:
                driver.add_cookie(cookie)
                driver.get(www)
                # 读取完cookie刷新页面
                driver.refresh()
                print("调用cookie成功,尝试登录,直至登录成功")
        except:
            driverok=(driver.page_source)#获取源码
            print(driverok)
            if u"公众平台帐号登录" in driverok:
                zhixing.dianji("xpath",'//*[@id="header"]/div[2]/div/div/div[2]/a')
                # 输入账号密码
                zhixing.shuru("name","account",username)
                zhixing.shuru("name","password",password)
                # 模拟点击登录
                zhixing.dianji("xpath",'//*[@id="header"]/div[2]/div/div/div[1]/form/div[4]/a')
                # 等待3秒
                time.sleep(20)
                #获取网站cookie
                dictCookies = driver.get_cookies()
                jsonCookies = json.dumps(dictCookies)
                # print(jsonCookies)
                with open('anquan.txt', 'w') as f:
                    f.write(jsonCookies)
                    print("保存cookie成功")
                    # 将cookies保存
        else:
            print('登录不成功')
        link = zhixing.dianji("xpath","/html/body/div[2]/div/div[2]/div/div/div[3]/div[2]/div[3]/div[2]/div/div[1]")
        time.sleep(3)
#执行到这里出问题了 因为弹出了新窗口
        all_hand = driver.window_handles
        print(all_hand)
        driver.switch_to_window(all_hand[-1])
        #driver.quit()
        return
            #执行反馈
            
if __name__ == '__main__':
    desired_capabilities = DesiredCapabilities.FIREFOX
    desired_capabilities["pageLoadStrategy"] = "eager"#normal 正常 eager 等解析完成 none当html下载完成
    driver = webdriver.Firefox(executable_path='geckodriver.exe')
    www=("https://mp.weixin.qq.com/")
    username=("*******")
    password=("*******")

    zhixing.qqqiyehao(www,username,password)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-10 10:56:44 | 显示全部楼层
suchocolate 发表于 2020-8-10 10:39
新窗口也是get后得到的,赋值给变量就好了。

就是不会嘛  多谢指教哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 12:32:39 | 显示全部楼层
一、多窗口就是多个对象
# 第一个窗口访问百度
driver1 = webdriver.Firefox()
driver1.get('http://www.baidu.com')

# 第二个窗口访问Sohu
driver2 = webdriver.Firefox()
driver2.get('http://www.sohu.com')



二、多选项卡(共用一个窗口)
browser = webdriver.Firefox()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to.window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to.window(browser.window_handles[0])
browser.get('https://python.org')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 14:37:46 | 显示全部楼层    本楼为最佳答案   
driver.execute_script('window.open()')    # 开启一个选项卡
windows=driver.window_handles           # 获得当前浏览器所有窗口
driver.switch_to.window(windows[0])     # 切换到最左侧窗口
driver.switch_to.window(windows[-1])    # 切换到最新打开窗口(注:也就是最右侧窗口)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表