马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 歌者文明清理员 于 2023-4-17 10:54 编辑
谁来解释这串代码,我给谁最佳from selenium import webdriver
from time import sleep
from lxml import html
from re import sub, compile
def login(email, password):
option = webdriver.ChromeOptions()
option.add_argument('headless')
browser = webdriver.Chrome(options=option)
browser.get('https://fishc.com.cn/member.php?mod=logging&action=login')
sleep(1)
browser.find_element('xpath', usernamex).send_keys(email)
browser.find_element('xpath', passwordx).send_keys(password)
browser.find_element('xpath', autologinx).click()
browser.find_element('xpath', submitx).click()
sleep(1)
try:
browser.find_element('id', 'succeedmessage_href').click()
return browser.page_source
except:
raise
finally:
browser.close()
def get_username(source):
tree = html.fromstring(source)
username_source = html.tostring(tree.xpath(get_usernamex)[0], encoding='unicode')
username = sub(compile(r'<.*?>'), '', username_source)
return username
usernamex = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[1]/table/tbody/tr/td[1]/input'
passwordx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[2]/table/tbody/tr/td[1]/input'
submitx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[6]/table/tbody/tr/td[1]/button'
autologinx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[5]/table/tbody/tr/td/label/input'
get_usernamex = '/html/body/div[6]/div/div[1]/div/p[1]/strong/a'
def main():
source = login('**********@qq.com', '****************')
username = get_username(source)
print(username)
if __name__ == '__main__':
main()
这段代码的主要目的是使用Selenium库登录到一个网站(fishc.com.cn),并从网站上抓取并打印用户名。以下是详细的代码解释和注释:
# 导入所需的库
from selenium import webdriver
from time import sleep
from lxml import html
from re import sub, compile
# 定义登录函数,传入email和password作为参数
def login(email, password):
# 设置Chrome浏览器的选项
option = webdriver.ChromeOptions()
# 添加无头模式(不显示浏览器界面)
option.add_argument('headless')
# 创建一个Chrome浏览器实例,使用上面的选项
browser = webdriver.Chrome(options=option)
# 打开登录页面
browser.get('https://fishc.com.cn/member.php?mod=logging&action=login')
# 等待1秒,确保页面加载完成
sleep(1)
# 在页面中找到用户名输入框,输入email
browser.find_element('xpath', usernamex).send_keys(email)
# 在页面中找到密码输入框,输入password
browser.find_element('xpath', passwordx).send_keys(password)
# 点击自动登录复选框
browser.find_element('xpath', autologinx).click()
# 点击提交按钮
browser.find_element('xpath', submitx).click()
# 再次等待1秒
sleep(1)
try:
# 如果登录成功,点击跳转链接
browser.find_element('id', 'succeedmessage_href').click()
# 返回页面源代码
return browser.page_source
except:
# 如果出现异常,抛出异常
raise
finally:
# 关闭浏览器实例
browser.close()
# 定义获取用户名的函数,传入网页源代码作为参数
def get_username(source):
# 使用lxml库解析网页源代码
tree = html.fromstring(source)
# 使用XPath定位到用户名所在的元素,并获取其源代码
username_source = html.tostring(tree.xpath(get_usernamex)[0], encoding='unicode')
# 使用正则表达式删除HTML标签,只保留文本内容
username = sub(compile(r'<.*?>'), '', username_source)
# 返回用户名
return username
# 定义XPath路径,用于定位页面上的元素
usernamex = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[1]/table/tbody/tr/td[1]/input'
passwordx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[2]/table/tbody/tr/td[1]/input'
submitx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[6]/table/tbody/tr/td[1]/button'
autologinx = '/html/body/div[6]/div/div[2]/div/div[2]/div[1]/div[1]/form/div/div[5]/table/tbody/tr/td/label/input'
get_usernamex = '/html/body/div[6]/div/div[1]/div/p[1]/strong/a'
# 定义主函数
def main():
# 调用登录函数,使用yhm和ww作为参数(这里需要替换为实际的用户名和密码)
source = login(yhm, ww)
# 调用get_username函数,传入网页源代码,获取用户名
username = get_username(source)
# 打印用户名
print(username)
# 如果这个脚本是主程序,则运行主函数
if name == '__main__':
main()
这个程序首先使用`login`函数,输入email和password作为参数,登录到fishc.com.cn网站。接着,调用`get_username`函数从登录后的页面源代码中抓取用户名。最后,`main`函数会打印用户名。在运行此代码时,请确保替换`yhm`和`ww`为实际的用户名和密码。
在这里,我们继续解释程序的关键部分。
1、main() 函数:这是程序的入口点。首先,它调用 login() 函数并传入用户名(yhm)和密码(ww),然后将返回的页面源代码保存在 source 变量中。接下来,它调用 get_username() 函数并传入页面源代码以获取用户名。最后,它打印出用户名。
请注意,在运行此脚本之前,您需要将 yhm 和 ww 替换为实际的用户名和密码。
2、if __name__ == '__main__'::这行代码是 Python 程序的常见结构,用于检查当前脚本是否作为主程序运行。如果是,则执行 main() 函数。这样做的目的是允许其他程序导入此脚本中的函数并在需要时调用它们,而不会在导入时自动执行 main() 函数。
总结一下,这个程序的主要功能是自动登录 fishc.com.cn 网站并从登录后的页面上抓取并打印出用户名。它通过使用 Selenium WebDriver 自动化浏览器操作,以及利用 lxml 库和正则表达式解析页面源代码来实现这一目标。在运行此程序之前,请确保正确安装了所有必需的库,并将用户名和密码替换为实际值。
|