in res.page_source是什么意思
时间: 2024-05-18 18:17:27 浏览: 120
`in res.page_source` 是一个 Python 中的条件语句,用于判断一个字符串是否包含另一个字符串。其中 `res.page_source` 是一个字符串类型的变量,它保存了当前页面的 HTML 源码。`in` 是 Python 中用于判断一个元素是否存在于某个对象中的关键字。如果对象中包含了这个元素,`in` 返回 `True`,否则返回 `False`。
在登录失败的断言中,我们使用 `if '用户名或密码错误' in res.page_source:` 来判断页面中是否包含“用户名或密码错误”的提示信息。如果包含,则说明登录失败,执行断言失败的操作;反之则说明登录成功,执行断言成功的操作。
相关问题
if '用户名或密码错误' in res.page_source: assert False, '登录失败,用户名或密码错误' else: assert 'Dashboard - Leon CRM' in res.title 如何将错误信息改成The password can not be less than 6 digits或者Please enter a valid email Password
您可以使用以下代码将错误信息改为"The password can not be less than 6 digits"或者"Please enter a valid email Password":
```python
if '用户名或密码错误' in res.page_source:
error_message = res.find_element_by_xpath("//div[contains(@class, 'error-message')]").text
if "密码长度至少为6位" in error_message:
assert False, 'The password can not be less than 6 digits'
elif "请输入有效的电子邮件地址或密码" in error_message:
assert False, 'Please enter a valid email Password'
else:
assert False, '登录失败,用户名或密码错误'
else:
assert 'Dashboard - Leon CRM' in res.title
```
在这段代码中,我们首先使用 `find_element_by_xpath` 方法获取错误信息。然后,我们检查错误信息中是否包含特定的文本,如果包含,则抛出相应的自定义错误信息,否则仍然抛出默认的"登录失败,用户名或密码错误"信息。
from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup import time # 目标网站的 URL url = 'http://example.com/rank/list' # Chrome 浏览器配置 chrome_options = Options() chrome_options.add_argument('--disable-extensions') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-dev-shm-usage') # 启动 Chrome 浏览器 browser = webdriver.Chrome(options=chrome_options) # 发起第一页的请求并解析 HTML 标签 browser.get(url) time.sleep(3) # 等待 3 秒钟,等待 AJAX 加载完成 soup = BeautifulSoup(browser.page_source, 'html.parser') total_pages = soup.select('.ant-pagination-item:not(.ant-pagination-next):not(.ant-pagination-prev)')[-1]['title'] current_page = soup.select_one('.ant-pagination-item-active').text rank_list = parse_page(soup) # 发起所有页码的请求,并将结果存入列表中 for page in range(2, int(total_pages) + 1): if str(page) != current_page: # 模拟在浏览器中翻页操作 browser.execute_script(f'window.antDesignPro.current.delete("/rank/list?page={int(current_page)}")') # 删除当前页的数据 browser.execute_script(f'window.antDesignPro.current.jump("/rank/list?page={page}")') # 跳转到需要打开的页码 time.sleep(3) # 等待 3 秒钟,等待 AJAX 加载完成 soup = BeautifulSoup(browser.page_source, 'html.parser') page_data = parse_page(soup) rank_list += page_data current_page = page # 将所有分页数据合并成一个完整的 DataFrame 对象 all_data = merge_data(rank_list) # 关闭浏览器窗口 browser.quit() # 打印输出结果 print(all_data),注意:目标网站采用了 AJAX 或者 JavaScript 技术来进行分页加载数据,因此翻页时并没有刷新整个页面,也无法从html文本获得第一页以后的排名帮我修改代码,要求用到request和beautifulsoup等库,
好的,以下是修改后的代码,使用了 requests 和 BeautifulSoup 库来发送请求和解析 HTML 标签:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
def get_rank_list(url):
# 发起第一页的请求并解析 HTML 标签
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
total_pages = soup.select('.ant-pagination-item:not(.ant-pagination-next):not(.ant-pagination-prev)')[-1]['title']
current_page = soup.select_one('.ant-pagination-item-active').text
rank_list = parse_page(soup)
# 发起所有页码的请求,并将结果存入列表中
for page in range(2, int(total_pages) + 1):
if str(page) != current_page:
# 模拟在浏览器中翻页操作
headers = {
'Referer': url,
'X-Requested-With': 'XMLHttpRequest'
}
res = requests.delete(url, headers=headers, params={'page': int(current_page)}) # 删除当前页的数据
res = requests.get(url, headers=headers, params={'page': page}) # 跳转到需要打开的页码
soup = BeautifulSoup(res.text, 'html.parser')
page_data = parse_page(soup)
rank_list += page_data
current_page = page
# 等待 3 秒钟,等待 AJAX 加载完成
time.sleep(3)
# 将所有分页数据合并成一个完整的 DataFrame 对象
all_data = merge_data(rank_list)
return all_data
def parse_page(soup):
rank_list = []
for tr in soup.select('tbody tr'):
rank = tr.select_one('.rank').text.strip() # 排名
name = tr.select_one('.name').text.strip() # 名称
score = tr.select_one('.score').text.strip() # 得分
rank_list.append([rank, name, score])
return rank_list
def merge_data(rank_list):
df = pd.DataFrame(rank_list, columns=['rank', 'name', 'score'])
return df
if __name__ == '__main__':
url = 'http://example.com/rank/list'
all_data = get_rank_list(url)
print(all_data)
```
注意:目标网站采用了 AJAX 或者 JavaScript 技术来进行分页加载数据,因此需要在请求头中添加 `X-Requested-With` 和 `Referer` 参数,以模拟浏览器发送请求。此外,还需要等待 AJAX 加载完成后再解析 HTML 标签,可以使用 `time.sleep()` 函数来实现。
阅读全文