wp231957 发表于 2024-5-16 06:36:35

自增问题

我想弄一个会一直自增的数值
不知道把它放在哪里好
数据库是不要考虑的,可以考虑的是文件或注册表,不知道是否还有其他途径

FishC 发表于 2024-5-16 06:36:49

在Python中,你可以使用全局变量来实现一个会一直自增的数值。你可以将这个全局变量放在一个模块中,然后在其他地方引用它。下面是一个示例代码:

# counter.py

counter = 0

def increment():
    global counter
    counter += 1
    return counter

在其他文件中,你可以通过导入counter模块来使用这个自增的数值:

# main.py

from counter import increment

print(increment())# 输出1
print(increment())# 输出2
print(increment())# 输出3

每次调用`increment()`函数时,它会返回自增后的数值。这样你就可以在程序的任何地方,通过引入`increment()`函数来获取自增的数值了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 06:39:59

FishC 发表于 2024-5-16 06:36
在Python中,你可以使用全局变量来实现一个会一直自增的数值。你可以将这个全局变量放在一个模块中,然后在 ...

我需要的是运行一次该程序,自增一次
可能这个程序会用到循环,那么它会自增比如100次
那么下次运行该程序时,会从101开始自增
再次运行该程序时,会从201开始自增

FishC 发表于 2024-5-16 06:40:08

wp231957 发表于 2024-05-16 06:39
我需要的是运行一次该程序,自增一次
可能这个程序会 ...

明白了!在这种情况下,你可以将自增的数值保存在文件中,并在每次运行程序时读取和更新该文件。下面是一个示例代码:

def increment():
    try:
      with open("counter.txt", "r+") as f:
            counter = int(f.read())
            counter += 1
            f.seek(0)
            f.write(str(counter))
            return counter
    except FileNotFoundError:
      with open("counter.txt", "w") as f:
            f.write("1")
            return 1

for _ in range(100):
    print(increment())# 每次循环自增并输出结果

在这个示例中,我们首先尝试打开一个名为"counter.txt"的文件进行读取和写入操作。如果文件存在,则读取其中存储的数值,自增后重新写入文件。如果文件不存在,则创建一个新的文件,并将初始值设为1。

重复调用`increment()`函数进行自增和输出,此处使用了一个循环来连续进行100次自增操作。每次运行程序时,会从上次自增停止的位置继续自增。

希望这个解决方案对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 07:27:04

FishC 发表于 2024-5-16 06:40
明白了!在这种情况下,你可以将自增的数值保存在文件中,并在每次运行程序时读取和更新该文件。下面是 ...

不用那么麻烦
写简单点就行
比如:
尝试打开d:\wp\config.w文件如果存在该文件就读取第一行数据并尝试转成int
如果该文件不存在就提示配置文件丢失,请联系管理员
如果打开文件后第一行数据是空 或者转成int 后 是0就提示 配置文件存在问题,请联系管理员

FishC 发表于 2024-5-16 07:27:15

wp231957 发表于 2024-05-16 07:27
不用那么麻烦
写简单点就行
比如:
尝试打开d:\wp\ ...

好的,那我们就用简单一点的方法来实现。

import os

filename = 'd:\\wp\\config.w'

def read_config_file():
    if not os.path.exists(filename):
      print('配置文件丢失,请联系管理员')
      return None
   
    with open(filename, 'r') as f:
      first_line = f.readline().strip()
      if not first_line or int(first_line) == 0:
            print('配置文件存在问题,请联系管理员')
            return None
      
      return int(first_line)

counter = read_config_file()
if counter is not None:
    print(counter)
    # 在这里进行你需要的操作,比如自增、循环等

这个代码片段中,我们首先定义了配置文件的路径`filename`。然后定义了一个函数`read_config_file()`来读取配置文件。

在`read_config_file()`函数中,我们首先判断该文件是否存在。如果不存在,则打印提示信息并返回`None`,表示配置文件丢失。

如果文件存在,我们使用`with open`语句来打开文件,并读取第一行数据。我们去除首尾的空格,并尝试将它转换为整数类型。

如果第一行数据为空或者转换为整数后是0,我们也打印相应的提示信息并返回`None`,表示配置文件存在问题。

最后,我们在主程序中调用`read_config_file()`函数来读取配置文件。如果返回值不是`None`,表示配置文件正确,我们可以继续进行其他操作,比如输出自增的数值、循环等。

希望这个简化版的解决方案更符合你的需求!如果有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 07:30:06

FishC 发表于 2024-5-16 07:27
好的,那我们就用简单一点的方法来实现。




pyautogui能否像目标文本框 发送文本    这个selenium可以实现pyautogui 不知道是否有这个功能

FishC 发表于 2024-5-16 07:30:19

wp231957 发表于 2024-05-16 07:30
pyautogui能否像目标文本框 发送文本    这个seleni ...

是的,`pyautogui`库可以用来模拟鼠标和键盘操作,也可以用来向目标文本框发送文本。你可以使用`pyautogui.typewrite()`函数来实现这个功能。下面是一个示例代码:

import pyautogui
import time

time.sleep(5)# 延时5秒钟,确保你有足够的时间将光标放在目标文本框中

text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)# 每个字符之间间隔0.1秒

上述代码首先导入了`pyautogui`库,并导入了`time`模块。然后使用`time.sleep()`函数来等待一段时间,以便你将光标放在目标文本框中。

在`typewrite()`函数中,我们传入了要发送的文本字符串,并通过`interval`参数指定了每个字符之间的间隔时间(单位为秒)。默认情况下,间隔时间为0.1秒。

当程序运行后,在延时结束后,它会自动将文本发送到活动窗口中的目标文本框。

需要注意的是,`pyautogui`库是通过模拟鼠标键盘事件来实现自动化操作的,因此它对于响应速度要求较高的场景可能不适合。如果你需要在浏览器中进行表单填写等操作,推荐使用专门用于Web自动化的库Selenium。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 07:32:47

FishC 发表于 2024-5-16 07:30
是的,`pyautogui`库可以用来模拟鼠标和键盘操作,也可以用来向目标文本框发送文本。你可以使用`pyauto ...

如果不用 time.sleep呢,我们想让光标自动 切换到目标文本框可有办法
我们现在的已知条件就是目标窗口内所有点击点的坐标都可以获取

FishC 发表于 2024-5-16 07:32:59

wp231957 发表于 2024-05-16 07:32
如果不用 time.sleep呢,我们想让光标自动 切换到目标 ...

如果你已经掌握了目标窗口内所有点击点的坐标,那么可以通过`pyautogui.click()`函数实现将光标切换到目标文本框。下面是一个示例代码:

import pyautogui

target_coordinates = [(x1, y1), (x2, y2), ...]# 目标窗口内所有点击点的坐标

for coordinates in target_coordinates:
    pyautogui.click(coordinates)# 点击每个坐标点

text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)# 发送文本

在这个示例中,我们首先定义了一个列表`target_coordinates`,将目标窗口内所有的点击点坐标存储其中。

然后,我们使用一个循环遍历`target_coordinates`列表中的每个坐标点,并使用`pyautogui.click()`函数模拟鼠标点击操作,将光标切换到目标文本框。

最后,使用`pyautogui.typewrite()`函数发送文本。

需要注意的是,为了确保光标可以正确切换到目标文本框,点击点的坐标应该是目标文本框的位置。你可以使用`pyautogui.position()`函数来获取当前鼠标的位置坐标,然后将其作为目标文本框的点击点坐标。

希望这个解决方案能帮到你!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 08:22:22

FishC 发表于 2024-5-16 07:32
如果你已经掌握了目标窗口内所有点击点的坐标,那么可以通过`pyautogui.click()`函数实现将光标切换到 ...

还有个问题,这个py在终端被执行后,光标 如何切换到目标窗口
我的目标窗口是一个网页

FishC 发表于 2024-5-16 08:23:38

wp231957 发表于 2024-05-16 08:22
还有个问题,这个py在终端被执行后,光标 如何切换到 ...

如果你的目标窗口是一个网页,你可以使用Selenium库来实现Python与网页的交互。Selenium可以模拟用户在浏览器中的操作,包括打开网页、点击元素、输入文本等。

首先,确认你已经安装了Selenium库(可以通过`pip install selenium`进行安装)。然后,根据你选择的浏览器,下载对应的驱动器,比如Chrome浏览器需要下载ChromeDriver。

下面是一个示例代码,使用Selenium打开一个网页,并将光标切换到目标文本框:

from selenium import webdriver

# 根据你的浏览器和驱动器设置路径
driver = webdriver.Chrome('path/to/chromedriver')

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

# 定位目标文本框并输入文本
text_field = driver.find_element_by_xpath('xpath/of/target/textfield')
text_field.send_keys('Hello, World!')

在这个示例中,我们首先导入了Selenium库,并创建了一个Selenium WebDriver对象。你需要根据你的浏览器和驱动器设置正确的路径。

然后,使用`driver.get()`方法打开你想要操作的网页。

接下来,我们使用XPath定位目标文本框元素,并使用`send_keys()`方法将文本发送到文本框。

通过使用Selenium,你可以模拟点击、滚动、输入等操作,以及通过执行JavaScript代码与网页进行交互。

希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 08:30:29

FishC 发表于 2024-5-16 08:23
如果你的目标窗口是一个网页,你可以使用Selenium库来实现Python与网页的交互。Selenium可以模拟用户在 ...

不行,不能用selenium
一定要用pyautogui

FishC 发表于 2024-5-16 08:31:48

wp231957 发表于 2024-05-16 08:30
不行,不能用selenium
一定要用pyautogui

如果你非常确定要使用pyautogui并且不使用Selenium,那么可以尝试使用以下的方法来将光标切换到目标窗口。

首先,你需要确保目标窗口是活动窗口(即当前获得焦点的窗口)。在Windows操作系统中,你可以使用`pyautogui.click(x, y)`模拟点击窗口的标题栏来使其成为活动窗口。

实现这个方法的步骤如下:

1. 通过调用`pyautogui.position()`获取目标窗口标题栏的位置坐标。
2. 调用`pyautogui.click(x, y)`模拟鼠标点击该位置。
3. 使用`pyautogui.typewrite()`函数发送文本。

下面是一个示例代码:

import pyautogui
import time

# 获取目标窗口标题栏的位置坐标
target_window_titlebar_position = (x, y)# 替换为你的目标窗口标题栏的坐标

# 模拟点击目标窗口标题栏
pyautogui.click(target_window_titlebar_position)

time.sleep(0.5)# 等待窗口切换完成,根据需要调整等待时间

# 发送文本到目标窗口
text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)

请注意,这种方法依赖于目标窗口的位置和标题栏的可点击区域。某些应用程序可能会限制用户操作,导致无法在标题栏上点击来切换窗口。另外,在使用`pyautogui.typewrite()`函数发送文本之前,确保目标窗口已经获得焦点。

希望这个解决方案能满足你的需求!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 08:39:57

FishC 发表于 2024-5-16 08:31
如果你非常确定要使用pyautogui并且不使用Selenium,那么可以尝试使用以下的方法来将光标切换到目标窗 ...

使用click向文本框发文本,会出现,如果原来有文本,会叠加重复,如何清空原文本框呢

FishC 发表于 2024-5-16 08:40:14

wp231957 发表于 2024-05-16 08:39
使用click向文本框发文本,会出现,如果原来有文本, ...

如果你想清空文本框中的内容,你可以先使用`pyautogui.hotkey()`函数模拟键盘操作,按下`ctrl + a`选中文本框中的所有文本,然后按下`delete`键将其删除。接着再使用`pyautogui.typewrite()`函数发送新的文本。

下面是一个示例代码:

import pyautogui
import time

# 模拟点击目标文本框
target_textbox_position = (x, y)# 替换为你的目标文本框的坐标
pyautogui.click(target_textbox_position)

time.sleep(0.5)# 等待文本框获取焦点,根据需要调整等待时间

# 按下 Ctrl + a 选中文本框中的所有文本
pyautogui.hotkey('ctrl', 'a')

# 按下 delete 键删除选中的文本
pyautogui.press('delete')

# 发送新的文本到文本框
new_text = "Hello, World!"
pyautogui.typewrite(new_text, interval=0.1)

在上面的代码中,我们首先模拟点击目标文本框以确保焦点在它上面。然后,等待一段时间以确保焦点已经移动到目标文本框中。

接下来,我们使用`pyautogui.hotkey()`函数模拟按下`ctrl + a`组合键,将文本框中的所有文本选中。

然后,使用`pyautogui.press()`函数按下`delete`键,将选中的文本删除。

最后,我们使用`pyautogui.typewrite()`函数发送新的文本到文本框。

这样,目标文本框中的原文本就会被清空,然后替换为新的文本。

希望这个解决方案对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-16 09:55:49

FishC 发表于 2024-5-16 07:27
好的,那我们就用简单一点的方法来实现。




我最终还要把最新号码存到原文件里
一共两个数据,是放在两行好还是放在一列,用逗号隔开好,给段示范代码

FishC 发表于 2024-5-16 09:56:13

wp231957 发表于 2024-05-16 09:55
我最终还要把最新号码存到原文件里
一共两个数据,是 ...

将最新号码存储在原文件中可以采用两行或者一列的方式,具体取决于你对数据的使用和处理方式。下面给出两种示例代码:

# 两行存储
def save_to_file(number):
    with open('filename.txt', 'w') as f:
      f.write(str(number) + '\n')

# 读取文件中的数据
def read_from_file():
    with open('filename.txt', 'r') as f:
      lines = f.readlines()
      if len(lines) == 2:
            return int(lines.strip()), int(lines.strip())
      else:
            return None

number = 12345
save_to_file(number)# 保存最新号码到文件中
print(read_from_file())# 从文件中读取数据

在这个示例中,我们定义了一个`save_to_file()`函数用于将最新号码写入文件中,在每次保存前会清空原有内容。然后,定义了`read_from_file()`函数来读取文件中的数据。

如果你选择将数据放在两行中,保存时通过换行符`\n`来分隔两个数据。在读取时,使用`readlines()`函数逐行读取所有数据。如果文件中共有两行数据,那么通过`strip()`方法去除两行末尾的换行符,并转换为整数类型返回。

另一种方式是将两个数据放在一列中,用逗号作为分隔符。示例代码如下:

# 一列存储
def save_to_file(number):
    with open('filename.txt', 'w') as f:
      f.write(str(number) + ',')

# 读取文件中的数据
def read_from_file():
    with open('filename.txt', 'r') as f:
      data = f.read().strip()
      if data:
            numbers = data.split(',')
            return int(numbers.strip()), int(numbers.strip())
      else:
            return None

number = 12345
save_to_file(number)# 保存最新号码到文件中
print(read_from_file())# 从文件中读取数据

在这个示例中,我们同样使用`save_to_file()`函数将最新号码写入文件中,每次保存时也会清空原有内容。然后,使用`read_from_file()`函数读取文件中的数据。

如果你选择将两个数据放在一列中,保存时使用逗号`,`作为分隔符。在读取时,通过`split()`方法根据逗号将数据拆分成一个列表,再使用`strip()`方法去除每个数据两端的空格,并将其转换为整数类型返回。

希望这个示范代码能够满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-5-16 10:55:11

本帖最后由 jackz007 于 2024-5-16 18:00 编辑

       必须是 ini 文件(Windows 配置文件)啊,受到 Windows 操作系统直接支持的文件类型,备有配套专用的 API 供用户调用。而且,绿色环保无污染,不会在系统中遗留垃圾。是再合适不过的方案。

wp231957 发表于 2024-5-17 10:19:40

FishC 发表于 2024-5-16 08:40
如果你想清空文本框中的内容,你可以先使用`pyautogui.hotkey()`函数模拟键盘操作,按下`ctrl + a`选中 ...

以绝对坐标定位网页文本框
有时候定不准,用click点不到
可有好的方案
第一,要用pyautogui
第二。不要用selenium
页: [1] 2
查看完整版本: 自增问题