鱼C论坛

 找回密码
 立即注册
查看: 5521|回复: 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了 把它注释了就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2020-4-5 00:13:57 From FishC Mobile | 显示全部楼层
没记错的话,好像是下载对应浏览器的驱动就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2020-4-5 06:21:17 From FishC Mobile | 显示全部楼层
直接从登录就开始不行吗
小甲鱼最新课程 -> https://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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

还可以使用吧 但是会跳出警告
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

  13. def open_chrome(browser):
  14.     browser.delete_all_cookies()
  15.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
  16.         cookieslist = json.load(cookief)
  17.         for cookies in cookieslist:
  18.             browser.add_cookie(cookies)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

能让我看下你是怎么控制的么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

是的,但是有些网站是扫码登录,故想登录上在驱动
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

有些网站是扫码登录,所以想登录后再连接
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

手动登录的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

有没有获取cookies的代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我那个代码就是扫码登陆的,第一次登陆运行get函数,time50秒的时候扫码,然后保存cookie,后面一直用另一个函数就可以了 不需要再次扫码了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

  27. def open_chrome(browser):
  28.     browser.delete_all_cookies()
  29.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
  30.         cookieslist = json.load(cookief)
  31.         for cookies in cookieslist:
  32.             browser.add_cookie(cookies)
  33. #从主页面baidu一步一步爬到图片里去
  34. def search():
  35.     try:
  36.         input = wait.until(
  37.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
  38.         )
  39.         submit = wait.until(
  40.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#su'))
  41.         )
  42.         input.send_keys("百度图片")
  43.         submit.click()
  44.         wait.until(
  45.             EC.presence_of_element_located((By.CSS_SELECTOR, '#page > a.n'))
  46.         )
  47.         html = browser.page_source
  48.         doc = pq(html)
  49.         items = doc('#1 .t a')
  50.         links = []
  51.         for each in items.items():
  52.             links.append(each.attr('href'))
  53.         links[0]
  54.         browser.get(links[0])
  55.         input = wait.until(
  56.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
  57.         )
  58.         input.send_keys("坂井泉水")
  59.         input.send_keys(Keys.ENTER)
  60.         wait.until(
  61.             EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
  62.         )

  63.         scorll_num(3)
  64.         wait.until(
  65.             EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
  66.         )
  67.         result = get_products()
  68.         return result
  69.     except TimeoutException:
  70.         browser.refresh()
  71.    
  72. #获取姐姐图片的地址
  73. def get_products():
  74.         html = browser.page_source
  75.         doc = pq(html)
  76.         items = doc('.imgpage .imglist .imgitem').items()
  77.         i = 0
  78.         product = {}
  79.         for each in items:
  80.             i += 1
  81.             product[ 'picture'+str(i)] = each.attr('data-objurl')
  82.         return product
  83.    
  84. def scorll_num(num = 10):
  85.     for i in range(num):
  86.         target = browser.find_element_by_id("pageMoreWrap")
  87.         browser.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
  88.         wait.until(
  89.             EC.presence_of_element_located((By.CSS_SELECTOR, '#pageMoreWrap'))
  90.             )
  91. #保存
  92. def save_class(name,url):
  93.     req = urllib.request.Request(url)
  94.     response = urllib.request.urlopen(req)
  95.     img = response.read()
  96.     if '.jpg' in url:
  97.         with open(name+'.jpg','wb') as f:
  98.                 f.write(img)
  99.     elif '.jpeg' in url:
  100.         with open(name+'.jpeg','wb') as f:
  101.                 f.write(img)
  102.     elif '.png' in url:
  103.         with open(name+'.png','wb') as f:
  104.                 f.write(img)           

  105. #下载
  106. def download_picture(folder='坂井泉水'):
  107.     os.chdir("C:\\Users\\Chysial\\Desktop")
  108.     os.mkdir(folder)
  109.     os.chdir(folder)
  110.     each = search()
  111.     for i in each:
  112.         try:
  113.             save_class(i,each[i])
  114.         except:
  115.             continue
  116.    
  117.    
  118. def main():
  119.     # 运行一次就行了,我这里就不重复了get_cookies(browser)
  120.     open_chrome(browser)
  121.     browser.refresh()
  122.     download_picture(folder='我的泉水姐姐')

  123.    
  124. if __name__ == '__main__':
  125.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 05:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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