(我想自动从Adwords下载报告。此报告不是其API的一部分。所以我想到使用浏览器自动化下载它。 我使用Puppeteer进行浏览器自动化。
但问题是我的帐户启用了双因素身份验证(我无法禁用是由于安全策略)。因此,每次我必须输入OTP或备用代码。 我尝试将备份代码添加到数组中,并在每次需要时从中获取一个。但谷歌一次只提供10个代码,因此它不会完全自动化。
我能以任何方式完全自动化整个工作流程吗?
答案 0 :(得分:0)
无法像答案中那样共享工作流程。以下是一些可以帮助您获得所需结果的替代资源。
您正在寻找谷歌开发者提供的Reporting API,它可以让您按照自己的意愿下载报告。这个api有一个rate limit集。您还需要阅读有关OAuth refresh token。
的更多信息否则,如果您想使用Puppeteer自动化整个工作流程。我建议将生成OTP /备份代码自动化作为工作流程的一部分。这样您就可以拥有无限制的OTP代码。虽然感觉使用他们的API会是最好的选择。
如果您有任何相关代码,请将其添加到您的问题中,我们将很乐意相应地更新我的答案。
答案 1 :(得分:0)
不确定仍然需要它,但是作为一种替代解决方案,您可以将python与selenium和pyotp(2 factor authentication)结合使用。在这里,我发布了示例登录名+ 2因子验证。也可以修改api。
import pyotp
from pyotp import TOTP
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('./chromedriver_v80.exe')
driver.get("https://www.example.com/")
wait = WebDriverWait(driver, 20)
login_username = driver.find_element_by_name("username")
login_username.clear()
login_username.send_keys(username)
login_passoword = driver.find_element_by_name("password")
login_passoword.clear()
login_passoword.send_keys(password)
driver.find_element_by_name("login").click()
# wait for the 2FA field to display
authField = wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='token']")))
# get the token from google authenticate
ga_secret = "4ythgotj3d784rjy6jw94o2xczpjgnta" #your GA 32 character hash
totp = TOTP(ga_secret)
token = totp.now()
print(token)
# enter the token in the UI
authField.send_keys(token)
# click on the button to complete 2FA
driver.find_element_by_xpath("//*[@id='token_login']").click()
driver.close()