InstaPy因Cookie授权弹窗无法定位元素,登录失败求助
我是Python新手,使用InstaPy(版本0.6.16)时遇到登录失败问题:页面的「Allow cookies」弹窗遮挡了登录区域,导致InstaPy无法定位登录输入框,触发NoSuchElementError异常。此前已解决浏览器检查和geckodriver定位问题,但当前登录问题仍未解决。
错误日志
InstaPy configurationInstaPy Version: 0.6.16.. .. .. .. .. .. .. .. ._.Workspace in use: "C:/Users/barto/InstaPy"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOINFO [2023-04-02 01:41:20] [montyandmacythegoldens] Session started!ooooooooooooooooooooooooooooooooooooooooooooooooooooooINFO [2023-04-02 01:41:23] [montyandmacythegoldens] - Cookie file not found, creating cookie...WARNING [2023-04-02 01:41:33] [montyandmacythegoldens] Login A/B test detected! Trying another string...WARNING [2023-04-02 01:41:38] [montyandmacythegoldens] Could not pass the login A/B test. Trying last string...ERROR [2023-04-02 01:41:43] [montyandmacythegoldens] Login A/B test failed!b"Message: Unable to locate element: //div[text()='Log In'] Stacktrace: RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8 WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:180:5 NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:392:5 element.find/</<@chrome://remote/content/marionette/element.sys.mjs:134:16 "Traceback (most recent call last):File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\instapy\login_util.py", line 337, in login_userlogin_elem = browser.find_element(^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_elementreturn self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in executeself.error_handler.check_response(response)File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_responseraise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //button[text()='Log In']Stacktrace:RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:180:5NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:392:5element.find/</<@chrome://remote/content/marionette/element.sys.mjs:134:16 During handling of the above exception, another exception occurred: Traceback (most recent call last):File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\instapy\login_util.py", line 343, in login_userlogin_elem = browser.find_element(^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_elementreturn self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in executeself.error_handler.check_response(response)File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_responseraise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //a[text()='Log in']Stacktrace:RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:180:5NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:392:5element.find/</<@chrome://remote/content/marionette/element.sys.mjs:134:16 During handling of the above exception, another exception occurred: Traceback (most recent call last):File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\instapy\login_util.py", line 350, in login_userlogin_elem = browser.find_element(^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 831, in find_elementreturn self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in executeself.error_handler.check_response(response)File "C:\Users\barto\InstagramBOT.venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_responseraise exception_class(message, screen, stacktrace)selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //div[text()='Log In']Stacktrace:RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:180:5NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:392:5element.find/</<@chrome://remote/content/marionette/element.sys.mjs:134:16 ....................................................................................................................................CRITICAL [2023-04-02 01:41:43] [montyandmacythegoldens] Unable to login to Instagram! You will find more information in the logs above.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' INFO [2023-04-02 01:41:46] [montyandmacythegoldens] Sessional Live Report:|> No any statistics to show [Session lasted 31.97 seconds]OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOINFO [2023-04-02 01:41:46] [montyandmacythegoldens] Session ended!ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
修正后的代码
from credentials import login, password from instapy import InstaPy from instapy import smart_run from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # login credentials insta_username = login insta_password = password comments = ['Nice shot! @{}', 'I love your profile! @{}', 'Your feed is an inspiration :thumbsup:', 'Just incredible :open_mouth:', 'What camera did you use @{}?', 'Love your posts @{}', 'Looks awesome @{}', 'Getting inspired by you @{}', ':raised_hands: Yes!', 'I can feel your passion @{} :muscle:'] # get an InstaPy session! # set headless_browser=True to run InstaPy in the background session = InstaPy(username=insta_username, password=insta_password, headless_browser=False, want_check_browser=False) with smart_run(session): # 优先处理Cookie授权弹窗 try: # 等待授权按钮出现,超时时间10秒 allow_cookie_btn = WebDriverWait(session.browser, 10).until( EC.presence_of_element_located((By.XPATH, "//button[contains(text(), 'Allow')]")) ) allow_cookie_btn.click() except: # 若未检测到弹窗,直接跳过 pass # 执行预设操作 session.like_by_tags(["natgeo"], amount=3)
解决思路
- 手动拦截弹窗:利用Selenium的等待机制,在InstaPy执行登录逻辑前,先定位并点击Cookie授权按钮,消除弹窗对登录区域的遮挡。
- 适配多语言:如果你的Instagram界面是中文,可将XPATH中的
'Allow'替换为'允许',匹配对应文本的按钮。 - 兼容旧版本:InstaPy 0.6.16版本较老,未内置新版Instagram的Cookie弹窗处理逻辑,手动添加代码是最直接的修复方案。
内容的提问来源于stack exchange,提问作者systenconti
相关产品推荐
相关产品推荐

