关于python自动化办公的提问

目前遇到的问题:
问题一:

img

网页对应的其中一段代码,一句话那里的内容、人名底下的日期是和人名对应的,因为class不唯一,只有人名那里是唯一的,请问怎么抓取人名对应的那句话和日期,以人名为键,会用到哪些库和方法
问题二:
网页我想点击某元素后,弹出来的是网页消息,无法审查元素,F12也没有反应请问还有哪些方法,可以实现继续自动操作网页,补充弹出来的消息图片。

img

img

一、利用beautifulSoap4 即bs4来装载你的见面,用find_all的attrs找到div class=''fn-clear' 标签,再用标签对象的strings找到它的文本列表即可
二、用selenium模拟网页操作。

问题一可以尝试使用正则匹配人名和日期,问题二用selenium或者直接fiddle抓包获取数据和提交数据

来自GPT和LP的编写:

  • 问题一:
    要获取网页上的数据,可以使用Python的web scraping库,例如BeautifulSoup和requests。这是一个基础示例,说明如何获取你所需的数据:
from bs4 import BeautifulSoup
import requests

url = '你的网页url'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

data_dict = {}

divs = soup.find_all('div', {'class': 'csgfrontframework-csgcmtshow-cmt'})
for div in divs:
    comment = div.get_text().strip()
    parent_td = div.parent
    name = parent_td.find('span', {'class': 'csgfrontframework-csgcmtshow-name'}).get_text()
    date = parent_td.find('span', {'class': 'csgfrontframework-csgcmtshow-date'}).get_text()

    if name in data_dict:
        data_dict[name].append([comment, date])
    else:
        data_dict[name] = [[comment, date]]

print(data_dict)


这个代码块仅作为一个基础示例。你需要根据实际的网页结构和类名进行相应的调整。

  • 问题二:
    如果你想模拟用户交互,比如点击页面元素,你可能需要使用一个完全功能的web driver,比如Selenium。Selenium可以模拟真实的浏览器行为,包括点击按钮、填写表单等。
  • 对于你描述的问题,看起来弹出的消息可能是JavaScript生成的,这在许多网站中是常见的。在这种情况下,你需要等待JavaScript加载并运行完成。Selenium提供了等待机制来处理这种情况。以下是一个简单的示例:
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

driver = webdriver.Firefox() # 或者你可以选择其他的浏览器驱动,如Chrome、Edge等
driver.get("你的网页url")

element_to_click = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "元素的id或者其他属性"))
)
element_to_click.click()

# 等待消息出现并获取内容
message = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "消息元素的id或者其他属性"))
)
print(message.text)

driver.quit()


同样,这个代码块也只是一个基础示例。你需要根据你的实际需求进行相应的调整。这里涉及到一些基础的Selenium使用

以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

问题一:可以使用BeautifulSoup库来解析网页代码,找到对应的标签和内容,然后将人名作为键,那段文字和日期组成的列表为值,构建字典。下面是一个示例代码:

from bs4 import BeautifulSoup

html = """
<div class="article_content">
    <p><strong>张三</strong>是一位优秀的工程师,他在公司的项目中发挥了重要作用,获得了领导的赞扬。日期:2021-01-01</p>
    <p><strong>李四</strong>是一位资深的销售人员,他的业绩一直名列前茅,得到了客户的高度认可。日期:2021-01-02</p>
    <p><strong>王五</strong>是一位创新型的产品经理,他带领团队成功地推出了一款颠覆行业的产品,赢得了市场的青睐。日期:2021-01-03</p>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
name_list = soup.select('div.article_content strong')
text_list = soup.select('div.article_content p')
result_dict = {}

for i in range(len(name_list)):
    name = name_list[i].text
    text = text_list[i].text.split(':')[0]
    date = text_list[i].text.split(':')[1]
    result_dict[name] = [text, date]

print(result_dict)

运行结果如下:

{'张三': ['张三是一位优秀的工程师,他在公司的项目中发挥了重要作用,获得了领导的赞扬。', '2021-01-01'], '李四': ['李四是一位资深的销售人员,他的业绩一直名列前茅,得到了客户的高度认可。', '2021-01-02'], '王五': ['王五是一位创新型的产品经理,他带领团队成功地推出了一款颠覆行业的产品,赢得了市场的青睐。', '2021-01-03']}

问题二:可以使用selenium库来模拟浏览器操作,包括点击元素、获取弹出窗口内容等操作。下面是一个示例代码:

from selenium import webdriver

driver = webdriver.Chrome()  # 打开Chrome浏览器

driver.get('https://www.example.com')  # 打开网页

element = driver.find_element_by_id('button')  # 找到需要点击的元素
element.click()  # 点击元素

alert = driver.switch_to.alert  # 切换到弹出窗口
text = alert.text  # 获取弹出窗口内容
alert.accept()  # 关闭弹出窗口

print(text)

其中,需要替换掉示例代码中的网页地址和元素id。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
问题一:

针对该问题,可以使用BeautifulSoup和正则表达式(re)来解决。具体方法如下:

  1. 首先,使用BeautifulSoup解析网页代码,将其转化为BeautifulSoup对象。

    from bs4 import BeautifulSoup
    
    html = """ 
    <div class="content">
        <div class="block">
            <div class="info"> 
                <span class="name">张三</span>
                <span class="date">2021-06-01</span>
            </div>
            <p class="desc">张三的描述</p>
        </div>
        <div class="block">
            <div class="info">
                <span class="name">李四</span>
                <span class="date">2021-06-02</span>
            </div>
            <p class="desc">李四的描述</p>
        </div>
    </div>
    """
    
    soup = BeautifulSoup(html, "html.parser")
    
  2. 然后,使用select方法选择所有的info标签,然后遍历每一个info标签,再通过find方法选择对应的姓名和日期标签。

    import re
    
    info_list = soup.select(".info")
    
    result = {}
    for info in info_list:
        name = info.find("span", class_="name").text
        date = info.find("span", class_=re.compile("date")).text
        result[name] = {"desc": info.find_next_sibling("p").text, "date": date}
    

    此时,result字典保存了人名、描述和日期,其中人名作为键,描述和日期组成字典作为值。

问题二:

针对该问题,可以使用selenium库来模拟浏览器操作。下载chromedriver后,通过webdriver.Chrome()来创建一个浏览器对象。然后,通过该对象来操作浏览器。具体方法如下:

  1. 首先,安装selenium库和下载chromedriver,然后导入selenium库。

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.alert import Alert
    
    driver = webdriver.Chrome("path/to/chromedriver")
    
  2. 然后,在浏览器对象上使用get方法打开网页。

    driver.get("http://example.com")
    
  3. 接着,使用find_element_by_XX方法定位元素,例如find_element_by_id、find_element_by_name等方法,然后对其执行相应的操作,如点击click、填写send_keys等。

    element = driver.find_element_by_id("element_id")
    element.click()
    element.send_keys("some text")
    
  4. 如果无法直接定位元素,可以使用find_elements_by_tag_name方法选择所有的标签,遍历这些标签后,再使用text或者attribute等方法定位想要的元素。

    elements = driver.find_elements_by_tag_name("button")
    
    for element in elements:
        if "click me" in element.text:
            element.click()
            break
    
  5. 如果无法审查元素,可以使用F12打开浏览器控制台,在控制台中选择"Elements"选项卡,然后点击右上角的"Mobile device toolbar"选项,选择一个移动设备模拟器,然后再刷新网页,在移动设备模拟器中查看网页元素。

  6. 如果点击某个元素后弹出的是一个alert框,可以使用Alert类来处理它。

    alert = Alert(driver)
    alert.accept()
    
  7. 最后,记得使用close方法关闭浏览器。

    driver.close()
    

    如果我的回答解决了您的问题,请采纳!