python + selenium + Chromedriver 的浏览器爬虫出现的一些问题的汇总

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.往前翻找到 '<iframe ' 字段 找到 id 字段 
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_win32\chromedriver.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:\ProgramFiles\Google\Chrome\Application\95.0.4638.69\WidevineCdm\_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})"""
    })#防止被检测

    额外补充raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: The executable chromedriver.exe needs to be available in the path. 
This method needs to be implemented in a sub class


 出现这种错误,就是让你别用我说的Service直接去掉,我更新了win11,可能是这玩意儿的锅,看情况用吧

把ChromeDriver.exe更新到最新更新地址(我这个巨快)

放到python安装地址

或者使用executable_path="ChromeDriver.exe路径名",

第二种情况虽然会报错,但对程序无影响,可以用异常处理跳过        还有,你可以试着更新selenium库(应该有用)

 

6.总结

爬虫写的好,牢饭吃地饱 

看到这你还不点个赞嘛(球球了)

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python Selenium4是一个用于自动化测试的工具,可以模拟用户在网页上的操作,比如点击、输入、提交表单等。以下是一个简单的Python Selenium4项目实践代码示例: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建Chrome浏览器实例 driver = webdriver.Chrome() # 打开网页 driver.get("https://example.com") # 查找网页元素 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "element_id")) ) # 操作网页元素 element.click() element.send_keys("example") element.submit() # 获取网页内容 print(driver.page_source) # 关闭浏览器实例 driver.quit() ``` 以上代码首先导入了必要的模块,包括`webdriver`、`By`和`WebDriverWait`等。然后创建了一个Chrome浏览器实例,并打开了目标网页。接着使用`WebDriverWait`等待目标元素加载完成,然后执行了一系列操作,比如点击、输入和提交等。最后通过`driver.page_source`获取了网页的源代码,并打印输出。最后使用`driver.quit()`关闭浏览器实例。 这只是一个简单的示例,实际项目中可能会更加复杂,需要根据具体需求进行适当的修改和扩展。通过使用Python Selenium4,可以方便地进行网页自动化测试,并且具有丰富的API和功能,可以满足日常测试的各种需求。 ### 回答2: Python Selenium是一个强大的自动化测试工具,可以用于Web应用的测试和爬虫项目。Selenium 4是Selenium的最新版本,增加了一些新特性和改进。 以下是一个Python Selenium 4项目实践的代码示例: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 设置Chromedriver的路径 chrome_driver_path = '/path/to/chromedriver' # 创建一个Chrome浏览器的实例 driver = webdriver.Chrome(executable_path=chrome_driver_path) # 打开一个网页 driver.get('https://www.example.com') # 使用显式等待等待某个元素加载完成 wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, 'element_id'))) # 进行一些操作,比如点击按钮、输入文本等 button = driver.find_element(By.XPATH, '//button') button.click() input_box = driver.find_element(By.ID, 'input_box') input_box.send_keys('Hello, World!') # 获取网页的标题和内容 title = driver.title content = driver.page_source # 关闭浏览器 driver.quit() ``` 以上代码演示了一个简单的使用Selenium 4的项目实践。首先,需要下载并设置Chrome浏览器的驱动路径。然后,创建一个Chrome浏览器的实例,打开一个网页。使用显式等待等待页面上的某个元素加载完成。接着,进行一些操作,比如点击按钮、输入文本等。最后,获取网页的标题和内容,最后关闭浏览器。 这只是一个示例,实际的项目中可能需要更多的操作和逻辑。使用Selenium 4可以实现更多的功能,比如截图、处理弹窗、执行JavaScript等。通过深入研究Selenium 4的文档和相关资源,可以更好地实践Python Selenium项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你这猴儿,因何赖在这不走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值