【问题标题】:python selenium, get over javascript popuppython selenium,克服javascript弹出窗口
【发布时间】:2021-01-18 09:24:57
【问题描述】:

我正在做一个项目,我必须去一个站点并在那里放一个大豆。我正在尝试使用 Python selenium 模块执行此操作,但是当我使用机器人进入站点时,我会收到一个弹出窗口(关于 cookie 的接受表)。如果不按接受,我将无法实现我想要做的事情。

我检查了站点的网络部分,发现该站点包含 cookie,当我进入该站点时,代码可以正常工作,并且成功按下接受 cookie 按钮,但这对我不起作用,因为它不能甚至在主站点上找到接受按钮,我知道不是因为它是用javascript编写的,但我不知道该怎么做。

不管怎样,让我们​​进入代码部分。

on the site I'm trying to login

the site that sent the cookie form the site uses

此代码适用于this

from selenium import webdriver
import time
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

option = webdriver.ChromeOptions()
option.add_argument('--disable-notifications')
option.add_argument("--mute-audio")

driver = webdriver.Chrome("chromedriver.exe", options=option)


driver.get('https://consent-pref.trustarc.com/?type=jefftest_ibm&site=ibm.com&action=notice&country=tr&locale=tr&behavior=expressed&gtm=1&layout=default_eu&irm=undefined&from=https://consent.trustarc.com/#')


time.sleep(10)
driver.find_elements_by_class_name("call")[0].click()

但它不适用于另一个,我怎样才能让它也适用于另一个?

【问题讨论】:

    标签: javascript python selenium popup


    【解决方案1】:

    您可以改用 pyautogui 来刺激点击:

    import pyautogui
    
    pyautogui.click(x=100, y=200)
    

    【讨论】:

    • 我的代码已经在这个站点上运行,this is the 站点不工作:)
    • 经过几次尝试,我找到了正确的坐标并且它工作了,所以我想问你一个问题,有没有办法不尝试找到直接按钮的坐标?
    • 我认为没有。您可以使用 pyautogui.position() 获取位置并使用 try 和 except 命令来尝试找出按钮的位置,但据我所知,没有直接的方法可以使用 pyautogui 获取按钮的位置跨度>
    【解决方案2】:

    @The Pilot Dude 的回答在某种程度上有效,但不能说是非常有活力的,所以:

    我使用原始 chrome 访问了该站点并接受了 cookie 并保存了这些 cookie。当我稍后必须重新进入该网站时,我重新加载了 cookie。

    对于下载 cookie:

    import pickle
    import time
    from selenium import webdriver
    
    option = webdriver.ChromeOptions()
    option.add_argument("--disable-notifications")
    option.add_argument("--mute-audio")
    option.add_argument("user-data-dir=C:\\Users\\___*******__\\AppData\Local\\Google\\Chrome\\User Data")
    driver = webdriver.Chrome(options = option)
    
    driver.get('https://speech-to-text-demo.ng.bluemix.net/')
    
    time.sleep(10)#in this time I accepted cookies
    
    pickle.dump(driver.get_cookies(), open("cookies.pkl","wb"))#for download cookies
    

    之后我可以为 chromedriver.exe 使用 cookie

    使用 cookie:

    import pickle
    from selenium import webdriver
    
    option = webdriver.ChromeOptions()
    option.add_argument("--disable-notifications")
    option.add_argument("--mute-audio")
    driver = webdriver.Chrome("chromedriver.exe", options = option)
    
    driver.get('https://speech-to-text-demo.ng.bluemix.net/')
    
    file = open("cookies.pkl","rb")
    cookies = pickle.load(file)
    for cookie in cookies:
        driver.add_cookie(cookie)#for use cookies
    file.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多