练习selenium模拟登陆淘宝
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
#通过制定chromedriver的路径来实例化driver对象,chromedriver放在当前目录
driver = webdriver.Chrome()
#控制浏览器访问url地址
driver.get("https://www.taobao.com/")
#元素定位
#搜索关键字
#driver.find_element(by=By.ID, value='kw').send_keys('python+selenium')
#点击登录
driver.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div[2]/div[2]/div[5]/div/div[2]/div[1]/a[1]').click()
time.sleep(6)
driver.find_element(by=By.ID, value='fm-login-id').send_keys('1')
driver.find_element(by=By.ID, value='fm-login-password').send_keys('1')
driver.find_element(by=By.XPATH,value='/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()
time.sleep(6)
#退出浏览器
#driver.quit()
网上百度说要转换框架,可这里没有框架,
觉得是定位问题
正常定位输入不会报错正常登录
原因是你的浏览器打开了新窗口,driver还是指向未登录页面那个窗口,加了两句代码就正常了
#获取当前浏览器的所有窗口句柄
handles = driver.window_handles
#切换到最新打开的窗口
driver.switch_to.window(handles[-1])
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
#通过制定chromedriver的路径来实例化driver对象,chromedriver放在当前目录
driver = webdriver.Chrome()
#控制浏览器访问url地址
driver.get("https://www.taobao.com/")
#元素定位
#搜索关键字
#driver.find_element(by=By.ID, value='kw').send_keys('python+selenium')
#点击登录
driver.find_element(by=By.XPATH,value='/html/body/div[3]/div[2]/div[2]/div[2]/div[5]/div/div[2]/div[1]/a[1]').click()
time.sleep(6)
#获取当前浏览器的所有窗口句柄
handles = driver.window_handles
#切换到最新打开的窗口
driver.switch_to.window(handles[-1])
driver.find_element(by=By.ID, value='fm-login-id').send_keys('1')
driver.find_element(by=By.ID, value='fm-login-password').send_keys('1')
driver.find_element(by=By.XPATH,value='/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()
time.sleep(6)
#退出浏览器
#driver.quit()
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(r"D:\software\chromedriver.exe")
driver = webdriver.Chrome(service=service)
# 控制浏览器访问url地址
driver.get("https://www.taobao.com/")
# 隐式等待
driver.implicitly_wait(1)
account = 'admin' # 账号
password = '123456' # 密码
# 找到“登录”位置
driver.find_element(by=By.CSS_SELECTOR, value="div.member-ft > div > a.btn-login").click()
driver.maximize_window()
time.sleep(2)
# 切换页面 获取当前页面handle 获取所有页面的handle 列表的后面
driver.switch_to.window(driver.window_handles[1])
# 找到“账号名”输入框
el_account = driver.find_element(by=By.CSS_SELECTOR, value='#fm-login-id')
print(el_account.text)
time.sleep(1)
el_account.click()
el_account.send_keys(account)
time.sleep(3)
# 找到“密码”输入框
el_password = driver.find_element(by=By.XPATH, value='//*[@id="fm-login-password"]')
# print(el_password.text)
# print(el_password.location)
el_password.click()
el_password.send_keys(password)
time.sleep(2)
# 找到“登录”按钮,并点击
el_login_btn = driver.find_element(by=By.XPATH, value='//*[@id="login-form"]/div[4]/button')
el_login_btn.click()
# print(el_login_btn.location)
time.sleep(2)
# 切换frame
driver.switch_to.frame('baxia-dialog-content')
# 找到滑块,获取宽高
el1 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1_n1z"]')
print(el1.size['width'])
print(el1.size['height'])
# 找到拖动区域,获得宽高
el2 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1__scale_text"]')
print(el2.size['width'])
print(el2.size['height'])
time.sleep(2)
# 创建一个事件链对象
chains = ActionChains(driver)
# 实现滑块拖动
chains.drag_and_drop_by_offset(el1, el2.size['width'], -el2.size['height'])
# 事件提交
chains.perform()
driver.close()
# 退出浏览器
# driver.quit()
浏览器打开新的页面要切换句柄,不然定位不到新页面的所有的元素:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 通过制定chromedriver的路径来实例化driver对象,chromedriver放在当前目录
driver = webdriver.Chrome()
# 控制浏览器访问url地址
driver.get("https://www.taobao.com/")
# 元素定位
# 搜索关键字
# driver.find_element(by=By.ID, value='kw').send_keys('python+selenium')
# 点击登录
driver.find_element(by=By.XPATH, value='/html/body/div[3]/div[2]/div[2]/div[2]/div[5]/div/div[2]/div[1]/a[1]').click()
time.sleep(6)
#获取当前浏览器的所有窗口句柄
handles = driver.window_handles
#切换到最新打开的窗口
driver.switch_to.window(handles[-1])
driver.find_element(by=By.ID, value='fm-login-id').send_keys('1')
driver.find_element(by=By.ID, value='fm-login-password').send_keys('1')
driver.find_element(by=By.XPATH, value='/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()
time.sleep(6)
# 退出浏览器
# driver.quit()
no such element
很简单没有切换句柄
只需在你的休眠6秒后添加这个语句即可
all_windows = driver.window_handles
driver.switch_to.window(all_windows[1])
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# 通过制定chromedriver的路径来实例化driver对象,chromedriver放在当前目录
driver = webdriver.Chrome()
# 控制浏览器访问url地址
driver.get("https://www.taobao.com/")
# 元素定位
# 搜索关键字
# driver.find_element(by=By.ID, value='kw').send_keys('python+selenium')
# 点击登录
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[2]/div[5]/div/div[2]/div[1]/a[1]').click()
time.sleep(6)
# 获取已经打开的所有句柄
all_windows = driver.window_handles
# 通过语句指向打开的第二个窗口,从0开始
driver.switch_to.window(all_windows[1])
driver.find_element(by=By.ID, value='fm-login-id').send_keys('1')
driver.find_element(by=By.ID, value='fm-login-password').send_keys('1')
driver.find_element(by=By.XPATH, value='/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()
time.sleep(6)
# 退出浏览器
# driver.quit()
我是新手小白,谢谢大家