Selenium WebDriver 低版本浏览器兼容性优化:百度搜索结果标识脚本
import yaml import time from selenium import webdriver
if name == 'main': # 读取配置文件 keyword_info = [] try: with open('keyword-setting.yaml', 'r', encoding='utf-8') as f: data = yaml.load(f.read(), Loader=yaml.FullLoader) for item in data: if data[item]['enabled']: keyword_info.append(data[item]) except Exception as e: print('加载配置文件失败') exit(e)
# 设置浏览器
options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=options)
for keyword in keyword_info:
# 搜索关键字
driver.get('https://www.baidu.com/')
search_input = driver.find_element_by_id('kw')
search_input.send_keys(keyword['keyword'])
search_input.submit()
# 执行网页标识js代码
js_script = '''
let domainList = my_domains;
let currentDomain = null;
let a = null;
let range = my_range;
// 获取结果
let container = document.querySelectorAll('.c-container');
if(container.length == 0){
container = document.querySelectorAll('.results > div');
if(container.length == 0){
container = document.querySelectorAll('.result > .res-list');
if(container.length == 0){
container = document.querySelectorAll('.b_algo');
}
}
}
outerLoop:for (let item of container) {
if(!item.classList.contains('new-pmd')){
if(!item.classList.contains('vrwrap')){
if(!item.classList.contains('rb')){
if(!item.classList.contains('res-list')){
if(!item.classList.contains('b_algo')){
continue
}
}
}
}
}
// 获取结果域名
currentDomain = item.querySelector('.c-color-gray');
if(currentDomain == null) {
currentDomain = item.querySelector('.citeurl');
if(currentDomain == null){
currentDomain = item.querySelector('.fb');
if(currentDomain == null){
currentDomain = item.querySelector('.g-linkinfo');
if (currentDomain == null){
currentDomain = item.querySelector('.b_attribution')
}
}
}
}
for (domain of domainList) {
if (currentDomain != null && currentDomain != undefined && currentDomain.innerText.indexOf(domain) >= 0 && currentDomain.innerText.indexOf('广告') < 0 && currentDomain.innerText.indexOf('百度') < 0) { // 去除广告
// 排名
let div = document.createElement('div')
div.innerText = '排名:' + range
div.style.position = 'absolute'
div.style.left = item.getBoundingClientRect().left - 90 + 'px'
div.style.top = item.getBoundingClientRect().top + 'px'
div.style.border = '5px #f00 solid'
div.style.padding = '6px'
div.style.fontWeight = 'bold'
div.style.fontSize = '17px'
document.getElementsByTagName('body')[0].appendChild(div)
// 边框
item.style.border = '5px #f00 solid';
break outerLoop;
}
}
}
// 删除必应搜索时左边的浮窗
let el = document.querySelector('#textDeeplinksWidgetContainer');
if(el != undefined || el != null){
el.remove();
}
'''
driver.execute_script(js_script, keyword['domain'], keyword['range'])
# 等待结果页面加载完成
time.sleep(3)
# 关闭浏览器
driver.quit()
原文地址: https://www.cveoy.top/t/topic/m2Mp 著作权归作者所有。请勿转载和采集!