如何使用Puppeteer

时间:2018-03-18 07:42:32

标签: node.js browser-automation puppeteer

(我想自动从Adwords下载报告。此报告不是其API的一部分。所以我想到使用浏览器自动化下载它。 我使用Puppeteer进行浏览器自动化。

但问题是我的帐户启用了双因素身份验证(我无法禁用是由于安全策略)。因此,每次我必须输入OTP或备用代码。 我尝试将备份代码添加到数组中,并在每次需要时从中获取一个。但谷歌一次只提供10个代码,因此它不会完全自动化。

我能以任何方式完全自动化整个工作流程吗?

2 个答案:

答案 0 :(得分:0)

无法像答案中那样共享工作流程。以下是一些可以帮助您获得所需结果的替代资源。

您正在寻找谷歌开发者提供的Reporting API,它可以让您按照自己的意愿下载报告。这个api有一个rate limit集。您还需要阅读有关OAuth refresh token

的更多信息

enter image description here

否则,如果您想使用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()