1.please use find_element instead find_element_by_XXX (这年头人不停内卷,连selenium库也卷起来了)
就像这样给你一条杠杠
然后告诉你已经过时了
然后你就得这么用
from selenium.webdriver.common.by import By driver.find_element(By.元素名称(大写), '元素内容')
2.模拟登录过滑块时出现,一直被要求重新刷新像这样的
代码如下
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
sever = Service('./chromedriver_win32/chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument(
"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
)#即告诉服务器,我们不是非爬虫
driver = webdriver.Chrome(service=sever, options=options)
url = 'https://www.aliexpress.com/?spm=a2g0o.productlist.1000002.1.51c830430FR7bn'
driver.execute_cdp_cmd("Page.addscriptToevaluateOnNewdocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""
})#具体上就是防止服务器查出我们是webdriver
driver.get(url)
execute_cdp_cmd(self, cmd, cmd_args)用来执行Chrome开发这个工具命令。 cdp即Chrome DevTools Protocal, Chrome开发者工具协议,API文档
至于为何这么写我也不是很清楚,请自行研究
3.过验证码时找不到元素
就像这样的滑块
欸嘿,机智的我刚一遇到这问题就想到了度娘,然后看见一个大爷说要转到frame
这是那大爷的代码
iframe = driver.find_element_by_xpath('//iframe') # 找到“嵌套”的iframe driver.switch_to.frame(iframe) # 切换到iframe然后,想也不想就直接用了
然后我就麻了,一直找不到元素
如果你跟我一样,直接用的话,就可能无限看到这报错
或这样
不过大爷的思路没问题, 找到“嵌套”的iframe
不过我们需要找到对应网页的iframe
操作如下
| 1.检查当前网页 | 选中出现验证码的位置
|
| 2.往前翻 | 找到 ' |
| 3.写代码 | 然后就是By.ID |
啊哈哈哈,后面仔细看了下,大爷写的是By.XPATH,我给写成了By.CLASS_NAME
尴尬,尴尬,属实尴尬,大爷的代码没任何毛病,完全能用
我的就算是另一种方法,也能用
time.sleep(5)#这给了个直接等待5秒,是为了等那个验证条出来
driver.find_element_by_id('baxia-dialog-content')
iframe = driver.find_element(By.ID, 'baxia-dialog-content')#我写的
# iframe = driver.find_element(By.XPATH, '//iframe')#大爷写的,都能用哈
然后关键就来了,你得将driver 切换到iframe ,否则还是找不到滑块
4.找不到滑块问题
按这个来操作基本就行了
from selenium.webdriver import ActionChains #导入这么个库 time.sleep(3)#停一下,给个时间去反应 iframe = driver.find_element(By.ID, 'baxia-dialog-content') # 找到“嵌套”的iframe driver.switch_to.frame(iframe) # 切换到iframe time.sleep(3)#停一下,给个时间去反应 button = driver.find_element(By.ID, 'nc_1_n1z') #找到滑块 ActionChains(driver).click_and_hold(button).perform() #点他并保持着 ActionChains(driver).move_by_offset(298, 0).perform() #滑动到啥位置,move_by_offset(298, 0)参数是坐标(X,Y) time.sleep(1)
如果没得任何反应,请自己微调,或者手动滑动滑条,欸嘿嘿嘿
5.各种稀奇古怪的配置(直接看吧)
直接上代码
s=selenium.webdriver.chrome.service.Service(r".chromedriver_win32chromedriver.exe")
#告诉python你的chromedriver的位置
option = webdriver.ChromeOptions()#创建设置项
option.add_experimental_option('excludeSwitches', ['enable-automation'])#忘了
option.add_argument('--disable-blink-features=AutomationControlled')#忘了
option.add_argument("--no-sandbox")#忘了
option.add_experimental_option('useAutomationExtension', False)#忘了
option.add_argument('-kiosk')#忘了
option.add_argument('--disable-gpu')#防止浏览器本身的某些出错,具体自己查查看
option.add_argument('--headless')#无头浏览
option.add_argument('--start-maximized')#全屏
#browser_locale = 'fr'
#option.add_argument("--lang={}".format(browser_locale))#我自己都没搞懂,反正也没用到
option.add_argument('blink-settings=imagesEnabled=false')#无图浏览
option.add_argument("--window-size=1920,1080")#设置浏览器窗口大小
option.add_argument(
"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36")#表明来源
option.add_argument(r'user-data-dir='
'C:ProgramFilesGoogleChromeApplication95.0.4638.69WidevineCdm_platform_specific'
)
#配置本地配置
#user-data-dir=这里填写你自己的浏览器配置地址
driver = webdriver.Chrome(service=s, options=option)
driver.execute_cdp_cmd("Page.addscriptToevaluateOnNewdocument", {
"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""
})#防止被检测
6.总结爬虫写的好,牢饭吃地饱
看到这你还不点个赞嘛(球球了)



