課堂派 登錄按鈕,手動能點(diǎn)擊,代碼定位無法點(diǎn)擊。用js去點(diǎn)擊就可以了
# 定位登錄按鈕
login_= driver.find_element(By.XPATH,
'''//*[text()="登錄"]''')
driver.execute_script("arguments[0].click()", login_)
12306 為例子,12306日期框是不能輸入的,被設(shè)置了readOnely,所以要修改成false.
情況1:
1.如果元素能定位,那么就直接寫定位發(fā)達(dá)式先定位出得到一個(gè)element對象。
2.寫js 修改value
js = """ argument[0].value = "value" """
driver.execute_script(ele, value) 執(zhí)行js
- 如果有的元素不可見 display:none
display:block 可見,也要修改js
js = """ argument[0].style.display="block" """
driver.execute_script(ele)執(zhí)行js
情況2:
如果元素不能定位,我們直接寫源生js就行了。

image.png
需要注意如果選擇了帶s得到是列表,需要跟上索引[index]取出對應(yīng)的element.接下來的操作和情況1 一樣。只需要將
arguments[0]替換成源生js 表達(dá)式就行了。
代碼如下
from selenium import webdriver
import time
import datetime
# 實(shí)例化 瀏覽器對象
driver = webdriver.Chrome()
# 打開 12306官網(wǎng)
driver.get("https://www.12306.cn/index/")
time.sleep(8)
# 獲取當(dāng)前一周之后的時(shí)間
date = datetime.datetime.now() + datetime.timedelta(weeks=1) # 獲取當(dāng)前一周之后的時(shí)間,這里還沒有字符串格式化
date = date.strftime("%Y-%m-%d")
# 編寫JS代碼操作頁面定位的元素 并賦值
js_start_end = '''
var start1 = document.getElementById("fromStation");
start1.value ="CQW"
var start = document.getElementById("fromStationText");
start.value = "重慶";
var end1 = document.getElementById("toStation");
end1.value = "KMM";
var end = document.getElementById("toStationText");
end.value = "昆明";
var date = document.getElementById("train_date");
date.readOnly = false;
date.value = arguments[0];
document.querySelector('a[id="search_one"]').click()
'''
driver.execute_script(js_start_end, date)
time.sleep(5)
# 退出驅(qū)動 釋放資源
driver.quit()