小白初学爬虫,简单的模拟豆瓣登录,遇到点问题,望好心人指教:
模拟豆瓣主页的登录,采用selenium的browser.switch_to.frame方法,可以进入第一层iframe框架,但其下的第二层iframe进不去,搜索了网上的方法,经过各种假设和尝试仍然无效。图片和代码如下:
图一
代码如下:
import time
from selenium import webdriver
if __name__ == '__main__':
username = '18983241561'
password = '654321'
browser = webdriver.Chrome(executable_path='C:\Program Files\Google\Chrome\Application\chromedriver.exe')
url = 'https://www.douban.com/'
browser.get(url)
browser.maximize_window()
time.sleep(3)
browser.switch_to.frame(browser.find_element_by_xpath("//iframe[@src='//accounts.douban.com/passport/login_popup?login_source=anony']"))
pass_choice = browser.find_element_by_xpath("//li[@class='account-tab-account']")
pass_choice.click()
username_ele = browser.find_element_by_xpath("//div[@class='account-tabcon-start']//div[@class='account-form-field']/input")
password_ele = browser.find_element_by_xpath("//input[@id='password']")
username_ele.send_keys(username)
password_ele.send_keys(password)
login_ele = browser.find_element_by_xpath("//a[@class='btn btn-account btn-active']")
login_ele.click()
browser.switch_to.frame(browser.find_element_by_xpath("//iframe[@src='//accounts.douban.com/passport/login_popup?login_source=anony']"))
browser.switch_to.frame(browser.find_element_by_xpath("//iframe[@src='https://captcha.gtimg.com/1/template/drag_ele.html']"))
img = browser.find_element_by_xpath("//image[@class='tc-bg-placeholder']")
location = img.location
size = img.size
top, button, left, right = location['y'], location['y']+size['height'], location['x'], location['x']+size['width']
print(top, button, left, right)
使用 browser.switch_to.default_content()
"""
举例:已QQ邮箱为例
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
# 1、通过name属性进行定位,前提是iframe有name属性
# driver.switch_to.frame("login_frame")
# 2、通过iframe索引去切换,注意iframe层级关系
# driver.switch_to.frame(1)
# 3、通过元素去定位,先找到要定位的iframe元素,然后再作为参数传入【常用】
iframe = driver.find_element("xpath","//iframe[@id='login_frame']")
driver.switch_to.frame(iframe)
# 点击账号密码登录
driver.find_element("xpath","//a[text()='帐号密码登录']").click()
# 输入账号
driver.find_element(By.ID,"u").send_keys("username")
# 输入密码
driver.find_element(By.ID,"p").send_keys("password")
# 点击登录
driver.find_element("xpath","//input[@id='login_button']").click()
# 强制等待5s
time.sleep(5)
# 退出浏览器
driver.quit()