如何使用 selenium 在某些网站中使用 kakao、google、naver id 自动登录
Posted
技术标签:
【中文标题】如何使用 selenium 在某些网站中使用 kakao、google、naver id 自动登录【英文标题】:how to auto login with kakao, google, naver id in certain web site using selenium 【发布时间】:2022-01-20 02:49:16 【问题描述】:我正在尝试制作本网站的 selenium 登录代码。 selenium 登录密钥出错。
https://member.jinhak.com/MemberV3/MemberJoin/MemberLogIn.aspx?ReturnSite=JM&ReturnURL=http%3a%2f%2fwww.jinhak.com%2findex.aspx
如果我单击每个按钮。他们显示登录选项卡。
例如,当我单击 naver 登录按钮并从 devtools 获取 xpath 时。但是在执行代码时,各种登录选项卡都会出现此错误
消息:没有这样的元素:无法找到元素: [@id="id"]
我想知道他们为什么不工作。
nick = input('id : ').strip()
pwd = input('password ').strip()
nick_type = (input('id type [default : None naver : 1 kakao : 2 google : 3] : ') or None)
# fname = (input('path to existing excel file(test.xlsx) : ') or './test.xlsx').strip()
options = Options()
# options.headless = True
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)
driver.implicitly_wait(10)
driver.get("https://www.jinhak.com/")
driver.find_element(By.XPATH,'//*[@id="util"]/div/ul/li[1]/a').click()
if nick_type:
try:
if nick_type == 'naver' or nick_type == '1':
driver.find_element(By.ID,'naverIdLogin_loginButton').click()
driver.switch_to.window(driver.window_handles[-1])
#login = driver.find_element(By.XPATH,'//*[@id="frmNIDLogin"]/ul/li/div/div[2]').send_keys(nick)
login.find_element(By.XPATH,'//*[@id="id"]').send_keys(nick)
login.find_element(By.XPATH,'//*[@id="pw"]').send_keys(pwd)
driver.find_element(By.ID,'log.login').click()
elif nick_type == 'kakao' or nick_type == '2':
driver.find_element(By.ID,'btnLoginK').click()
driver.switch_to.window(driver.window_handles[-1])
id = driver.find_element(By.XPATH,'//*[@id="id_email_2_label"]/span[1]').click()
id.find_element(By.XPATH, '//*[@id="id_email_2"]').send_keys(nick)
driver.find_element(By.XPATH,'//*[@id="loginEmailField"]/p').click()
driver.find_element(By.XPATH, '//*[@id="id_password_3"]').click().send_keys(pwd)
driver.find_element(By.XPATH,'//*[@id="login-form"]/fieldset/div[8]/button[1]').click()
elif nick_type == 'google' or nick_type == '3':
driver.find_element(By.ID,'btnLoginG').click()
driver.switch_to.window(driver.window_handles[-1])
driver.find_element(By.XPATH,'//*[@id="identifierId"]').click()
driver.find_element(By.XPATH,'//*[@id="identifierId"]').click().send_keys(nick)
driver.find_element(By.XPATH,'//*[@id="identifierNext"]/div/button/span').click()
driver.find_element(By.XPATH,'//*[@id="password"]/div[1]/div/div[1]/input').send_keys(pwd)
driver.find_element(By.XPATH,'//*[@id="identifierNext"]/div/button/span').click()
except Exception as e:
print(e)
else:
driver.find_element(By.XPATH,'//*[@id="txtMemID"]').send_keys(nick)
driver.find_element(By.XPATH,'//*[@id="txtMemPass"]').send_keys(pwd)
driver.find_element(By.XPATH,'//*[@id="panel_1"]/div/div[1]/div[3]/button').click()
【问题讨论】:
是naver绿色N。你也可以展示你的尝试。 是的,naver 是绿色的,kakao 是黄色的 我在您的代码中看不到//*[@id="id_line"]
。错误出现在代码的哪一步?当您插入用户名和密码并单击登录按钮时会发生什么?
插入id不起作用..
我已将其更改为 [@id="id"]
【参考方案1】:
wait=WebDriverWait(driver,10)
driver.get('https://www.jinhak.com/')
nick=1
us='1'
pw='1'
wait.until(EC.number_of_windows_to_be(2))
driver.switch_to.window(driver.window_handles[-1])
driver.close()
driver.switch_to.window(driver.window_handles[-1])
driver.find_element(By.XPATH,'//*[@id="util"]/div/ul/li[1]/a').click()
try:
if nick==1:
driver.find_element(By.ID,'naverIdLogin_loginButton').click()
wait.until(EC.number_of_windows_to_be(2))
driver.switch_to.window(driver.window_handles[-1])
driver.find_element(By.ID,'id').send_keys(us)
driver.find_element(By.ID,'pw').send_keys(pw)
driver.find_element(By.ID,'log\.login').click()
elif nick==2:
pass
elif nick==3:
pass
else:
pass
except Exception as e:
print(str(e))
pass
主要问题是驱动程序句柄的处理、关闭然后切换到不同的窗口。您应该使用 webdriver waits 来确保您的窗口也已打开。
您可以做的另一件事可以使您的测试更加安全,那就是使用等待元素弹出。
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"something")))
最后,如果您尝试单击 except 中的值但它们失败了,最好将其全部放入 try 然后捕获异常。
进口:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
【讨论】:
输入 id 和密码绝对有效!!但在我的情况下,弹出用于检查人的安全身份验证..ㅠㅠ以上是关于如何使用 selenium 在某些网站中使用 kakao、google、naver id 自动登录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Selenium 从亚马逊上的自动建议中“点击”某些建议?
在 Selenium python 中包含某些文本的其他 div 中选择某些 div 的方法
如何使用Selenium和Python在网站内的页面中导航?
如何在 python 中使用 Selenium 和 Beautifulsoup 解析网站? [关闭]