用class_name的话,为什么我的代码number不会变?for number in range(1,120): allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a' filmname = driver.find_element(By.CLASS_NAME,'drc-subject-info-title-text') score = driver.find_element(By.CLASS_NAME,'drc-rating-num') print(filmname.text) print(score.text)
时间: 2024-03-24 18:40:23 浏览: 14
在您的代码中,虽然使用了 `range(1, 120)` 来遍历 1 到 119 的所有整数,但是在循环内部,您每次都是使用相同的 XPATH 来查找电影名称和评分,这就导致了您无法获取到不同电影的名称和评分。
您需要在每次循环内部使用新的 XPATH 来查找电影名称和评分,可以根据当前的 number 值来构造新的 XPATH。以下是修改后的代码:
```
for number in range(1, 121):
allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a'
film_element = driver.find_element(By.XPATH, allfilmxpath)
film_element.click()
filmname = driver.find_element(By.CLASS_NAME, 'drc-subject-info-title-text')
score = driver.find_element(By.CLASS_NAME, 'drc-rating-num')
print(filmname.text)
print(score.text)
driver.back()
```
在这个修改后的代码中,我们使用当前的 number 值来构造新的 XPATH,然后在每次循环内部使用新的 XPATH 来查找电影名称和评分。
相关问题
为什么我的allfilmxpath中的number不会变?for number in range(1,120): allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a' filmname = driver.find_element(By.CLASS_NAME,'drc-subject-info-title-text') score = driver.find_element(By.CLASS_NAME,'drc-rating-num') print(filmname.text) print(score.text)
在您的代码中,allfilmxpath 中的 number 并没有变化,这是因为您没有在每次循环中使用新的 number 值来更新 allfilmxpath。您需要将 allfilmxpath 的赋值放到循环内部,并使用新的 number 值来构造新的 XPATH。
以下是修改后的代码:
```
filmname_xpath = '//h1[@class="drc-subject-info-title-text"]'
score_xpath = '//span[@class="drc-rating-num"]'
for number in range(1, 121):
allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a'
film_element = driver.find_element(By.XPATH, allfilmxpath)
film_element.click()
filmname = driver.find_element(By.XPATH, filmname_xpath)
score = driver.find_element(By.XPATH, score_xpath)
print(filmname.text)
print(score.text)
driver.back()
```
在这个修改后的代码中,我们将 allfilmxpath 的赋值放到了循环内部,并使用新的 number 值来构造新的 XPATH。同时,我们还添加了点击电影链接的语句,使得可以进入电影详情页获取电影名称和评分。
import copy import random class map(): chess_number=None; livcell=[]; def init(self, chess_number=60, density=0.5): self.livcell = [[0] * chess_number for i in range(chess_number)] for i in range(chess_number): for j in range(chess_number): pwall = random.random() if pwall < density: self.livcell[i][j] = 1 self.chess_number=chess_number self.density=density def neighborcell(self,pos): neighborList = [] x = pos[0] y = pos[1] neighborList = [[x - 1, y - 1], [x - 1, y], [x - 1, y + 1], [x, y - 1], [x, y + 1], [x + 1, y - 1], [x + 1, y], [x + 1, y + 1]] realnList = copy.deepcopy(neighborList) for i in neighborList: if i[0] < 0 or i[0] > self.chess_number - 1 or i[1] < 0 or i[1] > self.chess_number - 1: realnList.remove(i) return realnList 使用pytext写一个上述代码的单元测试
import unittest
from map import Map
class TestMap(unittest.TestCase):
def test_init(self):
m = Map()
self.assertEqual(m.chess_number, 60)
self.assertEqual(m.density, 0.5)
def test_neighborcell(self):
m = Map()
n = m.neighborcell([0, 0])
self.assertEqual(len(n), 3)
self.assertIn([0, 1], n)
self.assertIn([1, 0], n)
self.assertIn([1, 1], n)
def test_livcell(self):
m = Map()
self.assertEqual(len(m.livcell), 60)
self.assertEqual(len(m.livcell[0]), 60)
self.assertIn(0, m.livcell[0])
self.assertIn(1, m.livcell[0])
if __name__ == '__main__':
unittest.main()