上一篇关于selenium的文章其实只是通过它来得到网页代码,然后用BeautifulSoup来进行信息的查找。
这一次也不复杂,只是通过selenium自带的CSS选择器来选择按钮,然后点击选入购物车。这次模拟的是抢购的场景,也就是设定时间,然后自行选购。(emmm,好吧,就是按键精灵低级版,虽然我也没用过按键精灵)然后稍微运用了下cookies。
因为这次代码真的不复杂。所以不打算仔仔细细的记笔记。只不过调用的函数比较多,在代码里面注释下就OJBK好了。
selenium的简单调用可以看我之前的文章:selenium爬二手房
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import time
import json
def get_url(url, time_):
chrome_options = webdriver.ChromeOptions()
# 这里取消注释的话,会不显示浏览器出来。需要Chrome59之后的版本
# chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe')
# 这里设置wait之后,后面在执行代码之后超过十秒将抛出异常
wait = WebDriverWait(browser, 10)
try:
browser.get(url)
# 在这里打印cookies跟后面的对比
temp = browser.get_cookies()
print(temp)
browser.delete_all_cookies()
try:
with open('cookie.json', 'r') as file:
cookies = json.load(file)
for cookie in cookies:
browser.add_cookie(cookie)
print('loading cookies')
except IOError:
print('No cookie file found')
print('reload the url')
browser.get(url)
temp = browser.get_cookies()
print(temp)
# log in
# 我是自己通过扫码登陆...比起自己检测窗口然后输入账号密码,我觉得这样快点
# 所以在第一次执行代码的时候,这个sleep(60)的时间是来给我登陆,然后记录登陆后的cookies
time.sleep(60)
cookie_list = browser.get_cookies()
# 发现登陆后的cookie改变了,然后写入文件,主要训练下自己对cookies的使用
print(cookie_list)
with open('cookie.json', 'w') as file:
json.dump(cookie_list, file)
print('Downloading the cookie')
# 这里是等待按钮的出现。通过CSS选择器,接着使用EC来检测按钮的出现,等待时间是上面设置的10秒
# 如果10秒内按钮没有出现,将抛出异常。如果出现,那button就是购物车那个按钮
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a#InitCartUrl.btn-special1.btn-lg')))
print('Button found!')
# 等待自己设置的时间
fit_time(time_)
button.click()
print('Good job!')
print(time.localtime())
# 不Sleep的话,因为一点击就结束程序,浏览器马上关掉,就不能够加入购物车。
time.sleep(600)
except TimeoutException:
print('Timeout')
def fit_time(fittime):
now = time.localtime()
now = now[0:3] + fittime + now[-3:]
now = time.mktime(now)
timestamp = time.time()
time.sleep(now-timestamp)
if __name__ == '__main__':
target_url = 'https://item.jd.hk/1968268294.html'
target_time = (23, 42, 0)
get_url(target_url, target_time)
总体就这样,主要训练下自己对于selenium的一些操作和对cookies的使用,毕竟是第一次用。
想要继续接触下简单的数据库接着再学习框架。