Selenium 登录网易严选购物
2020-02-08 本文已影响0人
Lorence
学着用Selenium模拟登录网易严选的网站,并针对某一款商品,判断它有货物时候,就下单购买。代码的节选如下。
b = webdriver.Chrome()
ele8=b.find_element_by_xpath("//*[@id='j-yx-cp-m-top']/div[2]/div/div[1]/div[1]") #定位页面顶部的购物车
ele8.click() #点击购物车,进入购物车页面
我在写这段代码的时候,最难点是定位登录框的Frame,调试了两天时间才成功登录进去。
这里发现搜狐浏览器的xpath定位,比Chrome原生的xpath定位要准确详细的多。代码中的大量元素定位,都直接采用搜狐浏览器xpath的copy。没办法,菜鸟是这样。所以建议还是花点时间理解下xpath的结构及相关语法,会大大缩短调试时间。
下面是完整的代码,因为不大熟悉写类,所以一个函数下来,包括了登录,找寻网页的相关元素,判断,点击等必要内容。
from selenium import webdriver
import time
import random
def newlogin0202():
options=webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
b=webdriver.Chrome(chrome_options=options)
b = webdriver.Chrome()
b.maximize_window()
b.get("https://you.163.com/")
ele = b.find_element_by_xpath("//*[@class='j-yx-cp-topLogin']") #定位注册登录
ele.click()
time.sleep(1)
ele1_1=b.find_element_by_xpath("//*[@id='j-yx-loginFormWrap']/div/div[1]/div[2]/div[3]") #定位登录框
ele1_1.click()
time.sleep(1)
ele1 = b.find_element_by_xpath("//*[@id='j-yx-mailLoginWrap']/iframe") #定位邮箱登录
b.switch_to_frame(ele1)
time.sleep(1)
ele2 = b.find_element_by_xpath("//*[@class='j-inputtext dlemail j-nameforslide']") #定位账户栏
ele2.send_keys("xxxxxxx") #输入账户
ele3 = b.find_element_by_xpath("//*[@class='j-inputtext dlpwd']") #定位密码栏
ele3.send_keys("xxxxx") #输入密码
time.sleep(1)
ele4 = b.find_element_by_xpath("//*[@id='dologin']") #定位登录按钮
ele4.click() #点击登录
print("Login Success")
time.sleep(5)
ele5 = b.find_element_by_xpath("//*[@class='yx-cp-searchInput']") #定位主页的搜索栏
ele5.send_keys("3988533") #输入已知商品的ID
#口罩的ID是3401036,其他商品就要更改上面的ID
ele6=b.find_element_by_class_name("yx-cp-searchButton") #定位搜索
ele6.click() #点击搜索
time.sleep(1)
#搜索出商品后,加入购物车
while True:
try:
if b.find_element_by_xpath("//*[@id='j-searchContainer']/div/div/div/div[2]/div[2]/div[1]/ul/li/div/div[2]/div[2]/a"):
ele7=b.find_element_by_xpath("//*[@id='j-searchContainer']/div/div/div/div[2]/div[2]/div[1]/ul/li/div/div[2]/div[2]/a") #定位搜索结果的加入购物车按钮
print(ele7)
time(60)
ele7.click() #点击加入购物车
print("Add to cart")
ele8=b.find_element_by_xpath("//*[@id='j-yx-cp-m-top']/div[2]/div/div[1]/div[1]") #定位页面顶部的购物车
ele8.click() #点击购物车,进入购物车页面
time.sleep(1)
ele9=b.find_element_by_xpath("//*[@id='j-cartPage']/div/div/div[2]/div[2]/div[2]/button") #定位下单按钮
ele9.click() #点击下单按钮
print("Order is ok, pending for pay")
time.sleep(1)
ele10=b.find_element_by_xpath("//*[@id='confirmRoot']/div/div[3]/div[2]/div[2]/div[2]/div/div[2]/input") #定位付款按钮
ele10.click() #点击付款
print("Please pay at once!")
time.sleep(20)
break
except:
print("No stock now.....")
time.sleep(10)
#time.sleep(random.randint(15,30))
b.refresh()
time.sleep(2)
newlogin0202()
这里提醒一下,使用Selenium,要提前下载浏览器的驱动程序,并放到Python Scripts的文件夹内。我使用的是Chrome,所以我下载了chromedriver.exe
image.png