我想要做的是在Chrome中隐藏一个Instagram帐户,隐身模式。问题是,在我成功登录后,驱动程序获取了帐户的链接(当调用跟随函数时),我不再登录。
我在没有自动驱动程序的情况下进行了相同的操作,没有问题。
以下是我的两个功能:
def login(driver):
# Auto log in to instagram
driver.get('https://www.instagram.com/accounts/login/')
# Wait until the screen has loaded
try:
element = WebDriverWait(driver, 15).until(
EC.presence_of_all_elements_located((By.CLASS_NAME, "_ph6vk"))
)
except Exception:
print("Accounts page timed out")
input_elem = driver.find_elements_by_class_name("_ph6vk")
input_elem[0].send_keys("username")
input_elem[1].send_keys("password")
login_button = driver.find_element_by_class_name("_qv64e")
login_button.click()
def follow(driver, account_to_follow_link):
driver.get(account_to_follow_link)
#driver.close()
这是我的驱动程序实例化及其选项:
chrome_options = Options()
chrome_options.add_argument("--incognito")
#chrome_options.add_argument("--headless")
#chrome_options.add_argument("--window-size=1920x1080")
# Path of current driver & instantiation of driver object
os.chdir(r'C:\ig_automation')
driver = os.getcwd() +"\\chromedriver.exe"
driver = webdriver.Chrome(chrome_options=chrome_options,
executable_path=driver)
答案 0 :(得分:0)
driver.get(account_to_follow_link)
导致selenium离开您刚登录的页面,有效地将您退出。您无法使用driver.get()
。
更成功的是在登录成功后找到服务器加载的页面上的元素,并切换到页面已加载的元素或上下文。这意味着可能使用driver.switch_to...()
。
答案 1 :(得分:0)
我想出了一个解决方法。我没有先登录Instagram,而是使用了这个动作指令:
就是这样 - 这个解决方法适用于我的情况,因为我只想做一个动作,但如果你想做更多,你应该考虑另一个解决方案
答案 2 :(得分:0)
如果我从相同的作用域,相同的方法或在相同的对象内发出更多的get请求,Selenium不会注销我(如果您创建实现驱动程序的类)。这将保留驱动程序cookie。您可以使用在全局范围内声明的驱动程序来创建类,也可以传递driver.get_cookies()
来保留站点cookie并保持登录状态。
未确认:
只需在python程序的全局范围内声明驱动程序即可完成此操作。