鱼C论坛

 找回密码
 立即注册
查看: 5152|回复: 18

[已解决]如何用selenium连接(控制)已经打开IE浏览器

[复制链接]
发表于 2020-4-4 23:57:31 | 显示全部楼层 |阅读模式
30鱼币
本帖最后由 xue11 于 2020-4-5 00:00 编辑

因为有些网站需手动登录,登录后想使用selenium对已经打开的IE 窗口进行控制,来实现后续操作。

请问是否可以用selenium连接(控制)已经打开IE浏览器,在网上搜了下都是连接Chrome浏览器的,故求助各位,非常感谢!
最佳答案
2020-4-4 23:57:32
xue11 发表于 2020-4-5 20:17
有没有获取cookies的代码?

哪个get就是获取cookie的代码,先selenium运行网站,等待的时间,在selenium运行的网站上你扫码登陆,get保存的那个文件就是cookie,然后后面使用另一个函数登陆就行了 不需要再次使用get了 把它注释了就好了

最佳答案

查看完整内容

哪个get就是获取cookie的代码,先selenium运行网站,等待的时间,在selenium运行的网站上你扫码登陆,get保存的那个文件就是cookie,然后后面使用另一个函数登陆就行了 不需要再次使用get了 把它注释了就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 23:57:32 | 显示全部楼层    本楼为最佳答案   
xue11 发表于 2020-4-5 20:17
有没有获取cookies的代码?

哪个get就是获取cookie的代码,先selenium运行网站,等待的时间,在selenium运行的网站上你扫码登陆,get保存的那个文件就是cookie,然后后面使用另一个函数登陆就行了 不需要再次使用get了 把它注释了就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 00:13:57 From FishC Mobile | 显示全部楼层
没记错的话,好像是下载对应浏览器的驱动就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 00:28:03 | 显示全部楼层
同求,其实,我有一篇书上比较好的文章,用啦那个叫什么JS的浏览器,遗憾的是  selenium 已经不再支持该浏览器啦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 06:21:17 From FishC Mobile | 显示全部楼层
直接从登录就开始不行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 08:46:42 | 显示全部楼层
可以用ie,我用过,但是好像不能控制已经打开的浏览器,你可以用selenium打开ie浏览器后可以手动也可以控制
连接ie要下载IEDriverServer,还要调internet选项里的安全等等,你可以参考https://www.cnblogs.com/misswjr/p/9453566.html

评分

参与人数 1鱼币 +3 收起 理由
xue11 + 3

查看全部评分

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

使用道具 举报

发表于 2020-4-5 08:51:50 | 显示全部楼层
xiangjianshinan 发表于 2020-4-5 00:28
同求,其实,我有一篇书上比较好的文章,用啦那个叫什么JS的浏览器,遗憾的是  selenium 已经不再支持该浏 ...

还可以使用吧 但是会跳出警告
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 08:55:05 | 显示全部楼层
selenium会在你原网页上继续工作吗?不是新打开网页重新发送请求的?实现以前的操作,不需要模拟登陆下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 08:59:32 | 显示全部楼层
我一直配置的Chrome,可以在打开的selenium上运行登陆,填写信息然后继续运行是可以的,但让selenium在已经运行的窗口上继续,我还真不会,不知道有没有这功能,这是我当时爬百度图片时写的部分代码,希望对你有用
#配置模拟器
chrome_driver = r'C:\Users\Chysial\AppData\Local\Google\Chrome\Application\chromedriver.exe'
browser = webdriver.Chrome(chrome_driver)
wait = WebDriverWait(browser,10)
browser.get('https://www.baidu.com/')

#cookie模拟登陆,get一般运行一次就行,我因为调试后边把它注释了
def get_cookies(browser):
    #cookies没有时限方法,一种方法直接在里面把expiry改成int,另一种就是输出时候改写然后写入文件不然就需要修改了
    time.sleep(50)
    with open('C:\\Users\\Chysial\\Desktop\\cookies.txt','w') as cookief:
        cookief.write(json.dumps(browser.get_cookies()))
    browser.close()

def open_chrome(browser):
    browser.delete_all_cookies()
    with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
        cookieslist = json.load(cookief)
        for cookies in cookieslist:
            browser.add_cookie(cookies)

评分

参与人数 1鱼币 +5 收起 理由
xue11 + 5 谢谢

查看全部评分

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

使用道具 举报

发表于 2020-4-5 09:01:12 | 显示全部楼层
selenium无法控制已经打开IE浏览器,你可以定位到某个元素采用sendkeys()方法来进行登录;

或者是在你用selenium打开浏览器后,在代码中实现停顿,比如用一个input语句,手动登录完成之后,

再执行input语句后面的代码即可

评分

参与人数 1鱼币 +3 收起 理由
xue11 + 3

查看全部评分

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

使用道具 举报

发表于 2020-4-5 10:50:48 | 显示全部楼层
我最开始也试过用selenium操作已经打开的浏览器,我用的firefox,按照网上各种教程,没有成功过。

- 我后来就用selenium直接打开一个登陆页面,手动登录,保存cookie到本地
- 重新打开一个headless的浏览器,访问页面传入cookie,实现登陆。
- 这是我的代码[https://blog.csdn.net/The_accounting/article/details/95734423]
- 因为我在学校的网不好,经常会掉线,所以才保存cookie到本地。

评分

参与人数 1鱼币 +3 收起 理由
xue11 + 3

查看全部评分

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

使用道具 举报

发表于 2020-4-5 16:57:28 | 显示全部楼层
楼主找到方法没,我这两天也在找selenium操作已经打开的IE浏览器的方法,selenium操作新打开的IE浏览器会出现无法加载ActivX控件的现象,但是在网上找了好多文章都没有解决方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-5 18:17:01 From FishC Mobile | 显示全部楼层
zw8519807 发表于 2020-4-5 16:57
楼主找到方法没,我这两天也在找selenium操作已经打开的IE浏览器的方法,selenium操作新打开的IE浏览器会出 ...

能让我看下你是怎么控制的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-5 20:12:08 | 显示全部楼层
十月故里 发表于 2020-4-5 00:13
没记错的话,好像是下载对应浏览器的驱动就好了

是的,但是有些网站是扫码登录,故想登录上在驱动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-5 20:13:30 | 显示全部楼层
wp231957 发表于 2020-4-5 06:21
直接从登录就开始不行吗

有些网站是扫码登录,所以想登录后再连接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-5 20:14:27 | 显示全部楼层
Chysial 发表于 2020-4-5 08:55
selenium会在你原网页上继续工作吗?不是新打开网页重新发送请求的?实现以前的操作,不需要模拟登陆下吗?

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

使用道具 举报

 楼主| 发表于 2020-4-5 20:17:39 | 显示全部楼层
Chysial 发表于 2020-4-5 08:59
我一直配置的Chrome,可以在打开的selenium上运行登陆,填写信息然后继续运行是可以的,但让selenium在已经 ...

有没有获取cookies的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 20:29:56 | 显示全部楼层

我那个代码就是扫码登陆的,第一次登陆运行get函数,time50秒的时候扫码,然后保存cookie,后面一直用另一个函数就可以了 不需要再次扫码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 20:35:13 | 显示全部楼层
这是我爬百度图片时,的完整代码,get只运行一次就好,后面测试存在.txt文件就不需要用了,这是源代码 希望对你有用
from selenium import webdriver
import time
import json
import re
import random
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from pyquery import PyQuery as pq
import os,os.path
import urllib.request

#配置模拟器
chrome_driver = r'C:\Users\Chysial\AppData\Local\Google\Chrome\Application\chromedriver.exe'
browser = webdriver.Chrome(chrome_driver)
wait = WebDriverWait(browser,10)
browser.get('https://www.baidu.com/')

#cookie模拟登陆,get一般运行一次就行,我因为调试后边把它注释了
def get_cookies(browser):
    #cookies没有时限方法,一种方法直接在里面把expiry改成int,另一种就是输出时候改写然后写入文件不然就需要修改了
    time.sleep(50)
    #这段时间里在运行selenium的网址里自己扫码登陆,返回的cookie会有记录的,但是在运行的时候一定要刷新不然不显示
    with open('C:\\Users\\Chysial\\Desktop\\cookies.txt','w') as cookief:
        cookief.write(json.dumps(browser.get_cookies()))
    browser.close()

def open_chrome(browser):
    browser.delete_all_cookies()
    with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
        cookieslist = json.load(cookief)
        for cookies in cookieslist:
            browser.add_cookie(cookies)
#从主页面baidu一步一步爬到图片里去
def search():
    try:
        input = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
        )
        submit = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR ,'#su'))
        )
        input.send_keys("百度图片")
        submit.click()
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#page > a.n'))
        )
        html = browser.page_source
        doc = pq(html)
        items = doc('#1 .t a')
        links = []
        for each in items.items():
            links.append(each.attr('href'))
        links[0]
        browser.get(links[0])
        input = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
        )
        input.send_keys("坂井泉水")
        input.send_keys(Keys.ENTER)
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
        )

        scorll_num(3)
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
        )
        result = get_products()
        return result
    except TimeoutException:
        browser.refresh()
    
#获取姐姐图片的地址
def get_products():
        html = browser.page_source
        doc = pq(html)
        items = doc('.imgpage .imglist .imgitem').items()
        i = 0
        product = {}
        for each in items:
            i += 1
            product[ 'picture'+str(i)] = each.attr('data-objurl')
        return product
    
def scorll_num(num = 10):
    for i in range(num):
        target = browser.find_element_by_id("pageMoreWrap") 
        browser.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#pageMoreWrap'))
            )
#保存
def save_class(name,url):
    req = urllib.request.Request(url)
    response = urllib.request.urlopen(req)
    img = response.read()
    if '.jpg' in url:
        with open(name+'.jpg','wb') as f:
                f.write(img)
    elif '.jpeg' in url:
        with open(name+'.jpeg','wb') as f:
                f.write(img)
    elif '.png' in url:
        with open(name+'.png','wb') as f:
                f.write(img)           

#下载
def download_picture(folder='坂井泉水'):
    os.chdir("C:\\Users\\Chysial\\Desktop")
    os.mkdir(folder)
    os.chdir(folder)
    each = search()
    for i in each:
        try:
            save_class(i,each[i])
        except:
            continue
    
    
def main():
    # 运行一次就行了,我这里就不重复了get_cookies(browser)
    open_chrome(browser)
    browser.refresh()
    download_picture(folder='我的泉水姐姐')

    
if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 00:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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