下面的代碼是我為試驗 ActionChains 而撰寫的自動 CookieClicker。它基于 9:42 的教程視頻。(鏈接)
當我運行此代碼時,for 回圈運行了 1000 次,但只發生了 1 次單擊。只有當我從注釋行中洗掉“#”時才會發生多次點擊,所以我actions.click(cookie)每次都運行。至于視頻,那一行額外的代碼是不必要的。這可能是什么原因?
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
s = Service("C:\Program Files (x86)\chromedriver.exe")
driver = webdriver.Chrome(service=s)
driver.maximize_window()
driver.get("https://orteil.dashnet.org/cookieclicker/")
driver.implicitly_wait(5)
cookie=driver.find_element(By.ID,"bigCookie")
cookie_count = driver.find_element(By.ID,"cookies")
actions = ActionChains(driver)
actions.click(cookie)
for i in range(1000):
#actions.click(cookie)
actions.perform()
count=int(cookie_count.text.split(" ")[0])
print(i,count)
driver.quit()
uj5u.com熱心網友回復:
ActionChains 的實作
ActionChains 可以在鏈模式中使用。當您呼叫 ActionChains 物件上的操作方法時,這些操作將存盤在 ActionChains 物件的佇列中。當您呼叫 時perform(),事件將按照它們排隊的順序觸發。
履行()
執行所有存盤的操作。
結論
perform()將觸發存盤在佇列中的事件。在您的用例中,actions.click(cookie)是事件。
您的最佳代碼塊將是:
driver.get("https://orteil.dashnet.org/cookieclicker/")
cookie_count = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#cookies")))
cookie = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#bigCookie")))
for i in range(100):
ActionChains(driver).click(cookie).perform()
count = cookie_count.text.split(" ")[0]
print(i,count)
driver.quit()
控制臺輸出:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
31 31
32 32
33 33
34 34
35 35
36 36
37 37
38 38
39 39
40 40
41 41
42 42
43 43
44 44
45 45
46 46
47 47
48 48
49 49
50 50
51 51
52 52
53 53
54 54
55 55
56 56
57 57
58 58
59 59
60 60
61 61
62 62
63 63
64 64
65 65
66 66
67 67
68 68
69 69
70 70
71 71
72 72
73 73
74 74
75 75
76 76
77 77
78 78
79 79
80 80
81 81
82 82
83 83
84 84
85 85
86 86
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
uj5u.com熱心網友回復:
我假設您正在使用操作,為了使用它或了解它,因為您可以簡單地呼叫cookie.click()以獲得所需的結果。
當您需要對元素執行某些“操作”而不是查找或單擊它時,將使用操作,即您想右鍵單擊,或單擊并按住,或發送按鍵組合等。查看Selenium 操作以獲取更多資訊。
至于使用actions來點擊,你還需要了解perform獲取你的actions的復合物件(呼叫Actions的構建函式)并執行。由于您的操作是在 for 回圈之外宣告的,因此在第一次單擊后,該perform()函式將不再執行任何操作。
TLDR:
要么洗掉actions.click(cookie)for 回圈內的注釋,要么在cookie.click()不使用操作的情況下使用以獲得相同的結果。
for i in range(10):
actions.click(cookie)
actions.perform()
#cookie.click()
count=int(cookie_count.text.split(" ")[0])
print(i,count)
driver.quit()
它作業的 Colab 筆記本
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363277.html
