1

I'm trying to get an object from a table with python and selenium. However, first I need to click in the Goalscorers (table title) to show the table. The problem is that I can't click in any of the object, and there isn't any ref. So I can't understand what I need to do, all this div "are clickable" when I put the mouse on top of them, so not sure how it works, any idea? I tried

driverBet.find_element(By.XPATH,"//div[contains(@data-test-market,'Goalscorers')]").click()

but it's not clickable, I tried also the data-test-id="rabMarkets" but it's not clickable.

<div data-test-id="rabMarkets">
<div class="_ty4a3m">
<div data-test-id="rabMarketsAccordion">
<div class="_1ufbuwwo ">
<div class="_1b7dz8zNaN">
<div class="_q76d6b">
<span class="_uywwi">
<div>
<div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-labelledby="title-309" style="fill:#909DB4;height:18px;width:18px;" data-src="//bet.sbgcdn.com/static/assets/7200e23c7ae8f1778ea608e36e92b473.svg" class="injected-svg _uhlm2">
    <title id="title-309">
        Icon / Toggle / Outlined / Star
    </title>
    <path fill-rule="nonzero" d="M17.738 20.999a.716.716 0 0 1-.331-.082l-5.408-2.821-5.408 2.821a.717.717 0 0 1-.75-.053.704.704 0 0 1-.284-.692l1.033-5.976-4.375-4.232a.703.703 0 0 1-.18-.725.71.71 0 0 1 .575-.48l6.046-.873L11.36 2.45a.713.713 0 0 1 1.277 0l2.704 5.437 6.046.872a.71.71 0 0 1 .575.481.703.703 0 0 1-.18.725l-4.375 4.232 1.033 5.976a.705.705 0 0 1-.283.692.715.715 0 0 1-.42.135zM5 10l3.5 3.5-1 5 4.499-2.45 4.497 2.45-.996-5L19 10l-4.5-.5c-.155-.022-.988-1.522-2.501-4.5L9.5 9.5 5 10z" role="presentation">
</path>
</svg>
</div>
</div>
</span>
</div>
<div class="_zxe9qt">
<div class="_t0tx82" data-test-market="Goalscorers">Goalscorers</div>
<div class="_1cpli7v"></div></div><div class="_w81afw">
<span class="_uywwi">
<div><div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 9" width="15px" height="9px" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" aria-labelledby="title-1915" style="fill:#909DB4;height:14px;width:14px;" data-src="//bet.sbgcdn.com/static/assets/5c342ef89fd16eb91c0b8ddec4a2dcc0.svg" class="injected-svg _j30eqf _uhlm2">
    <title id="title-1915">
        icon-arrow-down
    </title>
    <path transform="translate(7.250000, 5.000000) scale(1, -1) rotate(90.000000) translate(-7.250000, -5.000000)" fill-rule="evenodd" d="m3 5.0033l7-7.0033 0.79289 0.79289c0.39023 0.39065 0.39032 1.0237 2.119e-4 1.4144l-4.7931 4.796 4.7927 4.7898c0.39085 0.3902 0.39104 1.0234 6.357e-4 1.414-7.06e-5 7.07e-5 -1.412e-4 1.413e-4 -4.238e-4 1e-7l-0.79289 0.79289-7-6.9967z" role="presentation"></path>
</svg></div></div></span></div></div></div></div></div></div>

thank you

damooo
  • 77
  • 7

1 Answers1

0

You can access the element using the class, something like this:

This functions first check if the element with the class exists:

def check_exists_by_class_name(browser, classname):
    try:
        browser.find_element(By.CLASS_NAME, classname)
    except NoSuchElementException:
        return False
    return True

Then, just use the function:

browser = webdriver.Chrome(service=service, options=options)    

if check_exists_by_class_name(browser, '_t0tx82'):

        print('Go on')
    
    else:
         print('not found')
Dharman
  • 30,962
  • 25
  • 85
  • 135
Diego Desenvolvedor
  • 378
  • 1
  • 6
  • 22
  • yes but the problem of your solution is that if I don't click in the object of goal scorer, I won't be able to see all the elements inside the object (because it's flex) – damooo Nov 14 '21 at 15:28
  • so the first thing you have to do is make this object visible, possibly by clicking on it, or looping between the elements (e.g. you loop on the 'above' element, which in this case is the _zxe9qt class), I believe so you can do what you need – Diego Desenvolvedor Nov 15 '21 at 15:25
  • Check this out https://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-back-and-forth – Diego Desenvolvedor Nov 16 '21 at 23:26